<?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 17:54:01 +0300</pubDate>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63631/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_2EVMeqbn" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br />Это значит что при попытке вывода линий они выводятся не на своих местах.<br />Для примера, в Settings.line три линии. В Init добавили еще две линии - их стало пять. Вернули из функции Init 5.<br />При отрисовке линий 4, 5 они выводятся поверх линий 1-3.<br />=============<br />Предположу, что забыли очистить буфер старых линий, поэтому они и выводятся. <br />
			<i>09.06.2022 16:18:27, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63631/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63631/topic4023/</guid>
			<pubDate>Thu, 09 Jun 2022 16:18:27 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63626/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Это значит что при попытке вывода линий они выводятся не на своих местах.<br />Для примера, в Settings.line три линии. В Init добавили еще две линии - их стало пять. Вернули из функции Init 5.<br />При отрисовке линий 4, 5 они выводятся поверх линий 1-3. <br />
			<i>09.06.2022 15:02:03, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63626/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63626/topic4023/</guid>
			<pubDate>Thu, 09 Jun 2022 15:02:03 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63623/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте.<br /><br />Могли бы Вы, пожалуйста, описать, что понимаете под &quot;отрисовка линий происходит некорректно&quot; ? <br />
			<i>09.06.2022 13:33:51, Daniil Pozdnyakov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63623/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63623/topic4023/</guid>
			<pubDate>Thu, 09 Jun 2022 13:33:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63310/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_SlTL1Eem" href="/user/23/" bx-tooltip-user-id="23">Zoya Skvorcova</a> написал:<br /><noindex><a href="/user/3132/" target="_blank" rel="nofollow">Nikolay</a></noindex>, Добрый день,<br /> &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; Описанная в данном инциденте проблема была устранена в версии &nbsp; &nbsp; &nbsp; 7.23.0 терминала QUIK.<br /> &nbsp; &nbsp; &nbsp; Данная версия была разослана всем брокерам системы QUIK в рамках &nbsp; &nbsp; &nbsp; стандартной процедуры обновления версии 23.11.2018.<br /> &nbsp; &nbsp; &nbsp; По поводу получения обновления рекомендуем вам обратиться к своему &nbsp; &nbsp; &nbsp; брокеру.<br /> &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; Приносим извинения за причиненные неудобства.<br />=============<br />Подниму..<br /><br />Вроде работало, не следил. Но теперь в 9-ой версии не работает.<br /><br />Если при первичной инициализации индикатора было x линий (добавление на график). А уже при повторной (после изменения настроек) линий больше x, то отрисовка линий происходит некорректно. <br />
			<i>18.05.2022 15:25:49, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63310/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63310/topic4023/</guid>
			<pubDate>Wed, 18 May 2022 15:25:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message58207/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_RBa3JOCW" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/199/" target="_blank" rel="nofollow">RayIntraday</a></noindex> написал:<br /> &nbsp;<br />====quote====<br /> <noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> &nbsp;написал:<br /> &nbsp; <br />====quote====<br /> &nbsp;<noindex><a href="/user/3132/" target="_blank" rel="nofollow">Nikolay</a></noindex> &nbsp; написал:<br />Нет, линии не обязательны конечно. Просто старые значения не должны исчезнуть с графика, поэтому вывод линий, пусть даже и одной, должен учитывать это.<br />=============<br /> &nbsp; вообще-то пересчет графиков взад - это бессмысленная затея.<br />---------------------------------------------------<br />&quot;После драки -кулаками не машут&quot;<br />=============<br /> &nbsp;А если профиль из линий рассчитывать и отрисовывать только последний час, на начало нового часа убрать линии профиля и оставить только maxVol сформированный (TYPET_BAR), кога начинается новый час расчет начать проводить заново. Получится ежечасный maxVol и один профиль. <br />Я нечто похожее видел в NT-7 вот ссылка &nbsp; <noindex><a href="https://ninjafutures.ru/resources/indikator-poc-urovnej.107/updates" target="_blank" rel="nofollow">Индикатор POC уровней</a></noindex> &nbsp;.<br />=============<br /> Вы имеете ввиду столбик числе у свечки?<br />Если да, то так можно сделать.<br />=============<br />Нет, я не про столбик чисел профиля у свечки.<br />Скорее про уровень максимального объёма в течении заданного промежутка времени (часа), а так же про уровень максимальной консолидации интереса POC, они бывают не совпадают<br />Нашлядно это вот как-то так <noindex><a href="https://c.radikal.ru/c10/2109/ac/d534292e09f5.png" target="_blank" rel="nofollow">Объём часа и пок часа</a></noindex> <br />
			<i>27.09.2021 12:28:32, RayIntraday.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message58207/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message58207/topic4023/</guid>
			<pubDate>Mon, 27 Sep 2021 12:28:32 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message58192/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_zbZ5Povy" href="/user/199/" bx-tooltip-user-id="199">RayIntraday</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> написал:<br /> &nbsp;<br />====quote====<br /> <noindex><a href="/user/3132/" target="_blank" rel="nofollow">Nikolay</a></noindex> &nbsp;написал:<br />Нет, линии не обязательны конечно. Просто старые значения не должны исчезнуть с графика, поэтому вывод линий, пусть даже и одной, должен учитывать это.<br />=============<br /> &nbsp;вообще-то пересчет графиков взад - это бессмысленная затея.<br />---------------------------------------------------<br />&quot;После драки -кулаками не машут&quot;<br />=============<br /> А если профиль из линий рассчитывать и отрисовывать только последний час, на начало нового часа убрать линии профиля и оставить только maxVol сформированный (TYPET_BAR), кога начинается новый час расчет начать проводить заново. Получится ежечасный maxVol и один профиль. <br />Я нечто похожее видел в NT-7 вот ссылка &nbsp;<noindex><a href="https://ninjafutures.ru/resources/indikator-poc-urovnej.107/updates" target="_blank" rel="nofollow">Индикатор POC уровней</a></noindex> .<br />=============<br />Вы имеете ввиду столбик числе у свечки?<br />Если да, то так можно сделать. <br />
			<i>26.09.2021 18:19:43, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message58192/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message58192/topic4023/</guid>
			<pubDate>Sun, 26 Sep 2021 18:19:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message58170/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_EgVmve4H" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/3132/" target="_blank" rel="nofollow">Nikolay</a></noindex> написал:<br />Нет, линии не обязательны конечно. Просто старые значения не должны исчезнуть с графика, поэтому вывод линий, пусть даже и одной, должен учитывать это.<br />=============<br /> вообще-то пересчет графиков взад - это бессмысленная затея.<br />---------------------------------------------------<br />&quot;После драки -кулаками не машут&quot;<br />=============<br />А если профиль из линий рассчитывать и отрисовывать только последний час, на начало нового часа убрать линии профиля и оставить только maxVol сформированный (TYPET_BAR), кога начинается новый час расчет начать проводить заново. Получится ежечасный maxVol и один профиль. <br />Я нечто похожее видел в NT-7 вот ссылка <noindex><a href="https://ninjafutures.ru/resources/indikator-poc-urovnej.107/updates" target="_blank" rel="nofollow">Индикатор POC уровней</a></noindex>. <br />
			<i>25.09.2021 13:47:02, RayIntraday.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message58170/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message58170/topic4023/</guid>
			<pubDate>Sat, 25 Sep 2021 13:47:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message58162/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_ddZKpb8P" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br />Нет, линии не обязательны конечно. Просто старые значения не должны исчезнуть с графика, поэтому вывод линий, пусть даже и одной, должен учитывать это.<br />=============<br />вообще-то пересчет графиков взад - это бессмысленная затея.<br />---------------------------------------------------<br />&quot;После драки -кулаками не машут&quot; <br />
			<i>25.09.2021 07:30:16, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message58162/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message58162/topic4023/</guid>
			<pubDate>Sat, 25 Sep 2021 07:30:16 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message58158/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Нет, линии не обязательны конечно. Просто старые значения не должны исчезнуть с графика, поэтому вывод линий, пусть даже и одной, должен учитывать это. <br />
			<i>24.09.2021 20:16:43, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message58158/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message58158/topic4023/</guid>
			<pubDate>Fri, 24 Sep 2021 20:16:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message58156/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_E4WHJKme" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/199/" target="_blank" rel="nofollow">RayIntraday</a></noindex> написал:<br /><br /><br />=============<br /> Сделать можно. Но для этого необходимо сразу инициализировать столько линий, сколько будет отрисовано для всех интервалов.<br /><br /><br /><br /><br />=============<br />А если производить расчёт без линий, а выводить только maxVol ?<br />Или расчёт обязательно подразумевает отображение линии как результат расчёта?<br />Если расчёты проводятся в течении часа и отрисовываются линии, час закончился, результаты остались начинается новый час и новые расчёты. Разве будут задействоваться старые линии и старые расчёты? <br />
			<i>24.09.2021 18:33:54, RayIntraday.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message58156/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message58156/topic4023/</guid>
			<pubDate>Fri, 24 Sep 2021 18:33:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message58155/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_BAhgxyHk" href="/user/199/" bx-tooltip-user-id="199">RayIntraday</a> написал:<br />Николай, а как можно сделать, что бы &#39; maxVol &#39; формировался в процессе, за некий промежуток времени и оставался неизменным, а не расчитывался по уже полученным данным. Я тут пытался поэксперементировать меняя период и отступ, с разными периодами и разными отступами, но результат получился так себе.<br /> <br />График в процессе торгов движется и данные постоянно меняются и пересчитываются, так что такое представление наверное не особо подходит для торговли и анализа.<br />maxVol, это я так понимаю нечто вроде point of control? <br />Было бы здорово, скажем чтобы &nbsp;maxVol, отрисовывался в течении часа, а потом так и оставался на графике. Может вы знаете как это реализовать в коде? Смотрел на гитхабе, у вас там много интересных вещей, но подобного нет.<br />=============<br />Сделать можно. Но для этого необходимо сразу инициализировать столько линий, сколько будет отрисовано для всех интервалов.<br /><br />Для первого часа 100, для второго еще 100 и т.д. Т.е. выделив 1000 линий можно будет отрисовать, скажем, 10 интервалов.<br />Тогда каждый новый интервал инициировать расчет заново и выводить новый пакет линий.<br /><br />Но даже на 100 линиях индикатор долго применяет настройки.<br /><br /><br />Другой вариант использовать не линии, а тип вывода бар (TYPET_BAR) или точки. Тогда можно использовать те же линии, т.к. они не будут соединяться между собой. Правда выглядит это уже не очень. <br />
			<i>24.09.2021 17:40:36, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message58155/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message58155/topic4023/</guid>
			<pubDate>Fri, 24 Sep 2021 17:40:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message58153/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_6fq7pjno" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br />А вот сделав такие изменения в цикл вывода строк, все работает.<br /> 
====code====
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for&nbsp;&nbsp;i =&nbsp;&nbsp;1 ,lines&nbsp;&nbsp;do&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;&nbsp;&nbsp;=&nbsp;&nbsp;{index&nbsp;&nbsp;=&nbsp;&nbsp;index - shift + bars, val&nbsp;&nbsp;=&nbsp;&nbsp;maxPrice}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;sortedProfile&#91;i&#93;~ =&nbsp;&nbsp;nil&nbsp;&nbsp; then&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;&nbsp;&nbsp;&nbsp;sortedProfile&#91;i&#93;.vol =&nbsp;&nbsp;math.floor (sortedProfile&#91;i&#93;.vol/MAXV * bars)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;sortedProfile&#91;i&#93;.vol &#62;&nbsp;&nbsp;0&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.index&nbsp;&nbsp;=&nbsp;&nbsp;index - shift + sortedProfile&#91;i&#93;.vol
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.val&nbsp;&nbsp;=&nbsp;&nbsp;sortedProfile&#91;i&#93;.price&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&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;&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;&nbsp;&nbsp; end&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;&nbsp;&nbsp;&nbsp; SetValue (index - shift,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i +&nbsp;&nbsp;1 , outlines&#91;i&#93;.val)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetValue (outlines&#91;i&#93;.index, i +&nbsp;&nbsp;1 , outlines&#91;i&#93;.val)
&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;&nbsp;&nbsp;&nbsp; --WriteLog('line '..tostring(i).." price "..tostring(GetValue(index-shift, i)).." - "..tostring(GetValue(outlines&#91;i&#93;.index, i)).." vol "..tostring(outlines&#91;i&#93;.index-index+shift)) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp; </pre>
=============
 <br /> 
====code====
<pre>&nbsp;&nbsp; --logfile=io.open(getWorkingFolder().."&#92;&#92;LuaIndicators&#92;&#92;priceAvgProfile.txt", "w") 

Settings -----------------------------------------
 
 end&nbsp;&nbsp; </pre>
=============
 <br />=============<br />Николай, а как можно сделать, что бы &#39;<B>maxVol</B>&#39; формировался в процессе, за некий промежуток времени и оставался неизменным, а не расчитывался по уже полученным данным. Я тут пытался поэксперементировать меняя период и отступ, с разными периодами и разными отступами, но результат получился так себе.<br /><img src="https://b.radikal.ru/b39/2109/5c/213d7d5475e1.jpg" alt="Пользователь добавил изображение" border="0" /><br />График в процессе торгов движется и данные постоянно меняются и пересчитываются, так что такое представление наверное не особо подходит для торговли и анализа.<br />maxVol, это я так понимаю нечто вроде point of control? <br />Было бы здорово, скажем чтобы &nbsp;maxVol, отрисовывался в течении часа, а потом так и оставался на графике. Может вы знаете как это реализовать в коде? Смотрел на гитхабе, у вас там много интересных вещей, но подобного нет. <br />
			<i>24.09.2021 16:22:20, RayIntraday.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message58153/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message58153/topic4023/</guid>
			<pubDate>Fri, 24 Sep 2021 16:22:20 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message35081/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_81MLBT4w" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a>, Добрый день,<br /> &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; Описанная в данном инциденте проблема была устранена в версии &nbsp; &nbsp; &nbsp; 7.23.0 терминала QUIK.<br /> &nbsp; &nbsp; &nbsp; Данная версия была разослана всем брокерам системы QUIK в рамках &nbsp; &nbsp; &nbsp; стандартной процедуры обновления версии 23.11.2018.<br /> &nbsp; &nbsp; &nbsp; По поводу получения обновления рекомендуем вам обратиться к своему &nbsp; &nbsp; &nbsp; брокеру.<br /> &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; Приносим извинения за причиненные неудобства. <br />
			<i>29.11.2018 11:28:23, Zoya Skvorcova.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message35081/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message35081/topic4023/</guid>
			<pubDate>Thu, 29 Nov 2018 11:28:23 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34584/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br /><br />Ошибка, описанная в данном инциденте, связано с некорректной работой ПО терминала QUIK и будет исправлена в одной из очередных версий программы.<br />Приносим извинения за причиненные неудобства. <br />
			<i>26.10.2018 15:37:13, Egor Zaytsev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34584/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34584/topic4023/</guid>
			<pubDate>Fri, 26 Oct 2018 15:37:13 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34482/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_vClukQmt" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a>, <br />Информация получена, проблема изучается. Постараемся в ближайшее время дать ответ. <br />
			<i>19.10.2018 21:28:52, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34482/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34482/topic4023/</guid>
			<pubDate>Fri, 19 Oct 2018 21:28:52 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34481/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://goo.gl/uP9HgS" target="_blank" rel="nofollow">маска-пленка с лифтинг-эффектом</a></noindex> <br />Новейшая разработка - маска с коллоидным золотом для безоперационной подтяжки кожи лица и шеи. <br />Реанимирует выработку коллагена, разглаживает морщины и подтягивает кожу, а также чистит поры и удаляет черные точки. 100% натуральный состав. <br /> <br /><noindex><a href="https://clck.ru/EZRZX" target="_blank" rel="nofollow">Инновационная маска с коллоидным золотом для безоперационной подтяжки кожи лица и шеи</a></noindex> <br />
			<i>19.10.2018 19:23:12, DavidutigE.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34481/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34481/topic4023/</guid>
			<pubDate>Fri, 19 Oct 2018 19:23:12 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34480/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			А вот сделав такие изменения в цикл вывода строк, все работает.<br />
====code====
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i=1,lines do&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93; = {index = index-shift+bars, val = maxPrice}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if sortedProfile&#91;i&#93;~=nil then&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;&nbsp;sortedProfile&#91;i&#93;.vol=math.floor(sortedProfile&#91;i&#93;.vol/MAXV*bars)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if sortedProfile&#91;i&#93;.vol&#62;0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.index = index-shift+sortedProfile&#91;i&#93;.vol
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.val = sortedProfile&#91;i&#93;.price&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&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;&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;end&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;&nbsp;SetValue(index-shift,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i+1, outlines&#91;i&#93;.val)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(outlines&#91;i&#93;.index, i+1, outlines&#91;i&#93;.val)
&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;&nbsp;&nbsp;&nbsp;--WriteLog('line '..tostring(i).." price "..tostring(GetValue(index-shift, i)).." - "..tostring(GetValue(outlines&#91;i&#93;.index, i)).." vol "..tostring(outlines&#91;i&#93;.index-index+shift))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end</pre>
=============
<br />
====code====
<pre>--logfile=io.open(getWorkingFolder().."&#92;&#92;LuaIndicators&#92;&#92;priceAvgProfile.txt", "w")

Settings={}
Settings.period = 150
Settings.shift = 100
Settings.Name = "*priceAvgProfile"
Settings.weeks = 0 -- 1 - текущая, отрицательное число - сколько прошлых недель, включая текущую
Settings.fixShift = 1 -- 1 - всегда смещено на указанное количество shift, если 0, то будет смещено на дату начала неделеи расчета
Settings.showMaxLine = 1
---------------------------------------------------------------------------------------

lines = 100
scale = 2
min_price_step = 1

function Init()
&nbsp;&nbsp;&nbsp;&nbsp;Settings.line = {}
&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;1&#93; = {}
&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;1&#93; = {Name = 'maxVol', Color = RGB(255, 128, 64), Type = TYPE_LINE, Width = 2}
&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, lines do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;i+1&#93; = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;i+1&#93; = {Color = RGB(185, 185, 185), Type = TYPE_LINE, Width = 2}
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;myFFF = FFF()
&nbsp;&nbsp;&nbsp;&nbsp;return lines
end

function OnCalculate(index)
&nbsp;&nbsp;&nbsp;&nbsp;if index == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DSInfo = getDataSourceInfo()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min_price_step = getParamEx(DSInfo.class_code, DSInfo.sec_code, "SEC_PRICE_STEP").param_value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scale = getSecurityInfo(DSInfo.class_code, DSInfo.sec_code).scale
&nbsp;&nbsp;&nbsp;&nbsp;end 
&nbsp;&nbsp;&nbsp;&nbsp;return myFFF(index, Settings)
end

---------------------------------------------------------------------------------------
function FFF()

&nbsp;&nbsp;&nbsp;&nbsp;local cacheL={}
&nbsp;&nbsp;&nbsp;&nbsp;local cacheH={}
&nbsp;&nbsp;&nbsp;&nbsp;local cacheC={}
&nbsp;&nbsp;&nbsp;&nbsp;local weeksBegin={}
&nbsp;&nbsp;&nbsp;&nbsp;local maxPriceLine={}

&nbsp;&nbsp;&nbsp;&nbsp;local outlines = {}
&nbsp;&nbsp;&nbsp;&nbsp;local calculated_buffer={}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return function(ind, Fsettings)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local period = Fsettings.period or 150
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local shift = Fsettings.shift or 150
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local weeks = Fsettings.weeks or 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local fixShift = Fsettings.fixShift or 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local showMaxLine = Fsettings.showMaxLine or 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local bars = 50

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shift = math.max(bars+1, shift)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local index = ind

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if index == 1 then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxPriceLine = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;weeksBegin = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheL = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheL&#91;index&#93; = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheH = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheH&#91;index&#93; = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheC = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheC&#91;index&#93; = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calculated_buffer = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines = {}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--maxPriceLine&#91;index&#93; = maxPriceLine&#91;index-1&#93; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheL&#91;index&#93; = cacheL&#91;index-1&#93; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheH&#91;index&#93; = cacheH&#91;index-1&#93; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheC&#91;index&#93; = cacheC&#91;index-1&#93; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not CandleExist(index) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return maxPriceLine&#91;index&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheH&#91;index&#93; = H(index)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheL&#91;index&#93; = L(index)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheC&#91;index&#93; = C(index)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if T(index).week_day&#60;T(index-1).week_day or T(index).year&#62;T(index-1).year then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;weeksBegin&#91;#weeksBegin+1&#93; = index
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if index &#60; Size() then return nil end&nbsp;&nbsp; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if calculated_buffer&#91;index&#93; ~= nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return maxPriceLine&#91;index&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if showMaxLine==1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift-1, 1, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift,&nbsp;&nbsp; 1, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i=1,#outlines do&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift-1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i+1, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i+1, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(outlines&#91;i&#93;.index,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i+1, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.index = index-shift
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.val = nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&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;local beginIndex = index-period
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if weeks == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beginIndex = weeksBegin&#91;#weeksBegin&#93; or beginIndex
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if weeks &#60; 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beginIndex = weeksBegin&#91;#weeksBegin+weeks&#93; or beginIndex
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if fixShift==0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shift = math.max(bars+1, index-beginIndex)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--WriteLog('weeks '..tostring(weeks)..' last '..tostring(weeksBegin&#91;#weeksBegin&#93;)..' beginIndex '..tostring(beginIndex))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local maxPrice = math.max(unpack(cacheH,math.max(beginIndex, 1),index))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local minPrice = math.min(unpack(cacheL,math.max(beginIndex, 1),index))&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;&nbsp;local priceProfile = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--local clasterStep = math.max((maxPrice - minPrice)/lines, min_price_step)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--local clasterStep = (maxPrice - minPrice)/lines
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local clasterStep = 10*min_price_step

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--WriteLog('minPrice '..tostring(minPrice)..' maxPrice '..tostring(maxPrice)..' clasterStep '..tostring(clasterStep))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i = 0, (index-beginIndex) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if CandleExist(index-i) then&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;&nbsp;&nbsp;&nbsp;local barSteps = math.max(math.ceil((H(index-i) - L(index-i))/clasterStep),1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for j=0,barSteps-1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local clasterPrice = math.floor((L(index-i) + j*clasterStep)/clasterStep)*clasterStep
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local clasterIndex = clasterPrice*math.pow(10, scale)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if priceProfile&#91;clasterIndex&#93; == nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;priceProfile&#91;clasterIndex&#93; = {price = clasterPrice, vol = 0}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;priceProfile&#91;clasterIndex&#93;.vol = priceProfile&#91;clasterIndex&#93;.vol + V(index-i)/barSteps
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--------------------
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local MAXV = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local maxPrice = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local maxCount = 0 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local sortedProfile = {}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i, profileItem in pairs(priceProfile) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAXV=math.max(MAXV,profileItem.vol)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if MAXV == profileItem.vol then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxPrice=profileItem.price
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxCount = maxCount + 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortedProfile&#91;maxCount&#93; = {price = profileItem.price, vol = profileItem.vol}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--WriteLog('maxV '..tostring(MAXV)..' tblMax '..tostring(sortedProfile&#91;1&#93;.vol))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if maxPrice == 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxPrice = O(index) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.sort(sortedProfile, function(a,b) return (a&#91;'vol'&#93; or 0) &#62; (b&#91;'vol'&#93; or 0) end)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------------------
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i=1,lines do&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93; = {index = index-shift+bars, val = maxPrice}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if sortedProfile&#91;i&#93;~=nil then&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;&nbsp;sortedProfile&#91;i&#93;.vol=math.floor(sortedProfile&#91;i&#93;.vol/MAXV*bars)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if sortedProfile&#91;i&#93;.vol&#62;0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.index = index-shift+sortedProfile&#91;i&#93;.vol
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.val = sortedProfile&#91;i&#93;.price&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&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;&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;end&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;&nbsp;SetValue(index-shift,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i+1, outlines&#91;i&#93;.val)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(outlines&#91;i&#93;.index, i+1, outlines&#91;i&#93;.val)
&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;&nbsp;&nbsp;&nbsp;--WriteLog('line '..tostring(i).." price "..tostring(GetValue(index-shift, i)).." - "..tostring(GetValue(outlines&#91;i&#93;.index, i)).." vol "..tostring(outlines&#91;i&#93;.index-index+shift))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if showMaxLine==1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift, 1, maxPrice)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxPriceLine&#91;index&#93; = maxPrice
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calculated_buffer&#91;index&#93; = true
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return maxPriceLine&#91;index&#93;
&nbsp;&nbsp;&nbsp;&nbsp;end
end

function WriteLog(text)

&nbsp;&nbsp;&nbsp;&nbsp;logfile:write(tostring(os.date("%c",os.time())).." "..text.."&#92;n");
&nbsp;&nbsp;&nbsp;&nbsp;logfile:flush();
&nbsp;&nbsp;&nbsp;&nbsp;LASTLOGSTRING = text;
 
end</pre>
============= <br />
			<i>19.10.2018 18:32:58, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34480/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34480/topic4023/</guid>
			<pubDate>Fri, 19 Oct 2018 18:32:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34479/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Я привел весь код индикатора.<br />Больше кода в нем нет.<br /><br />Вы хотите увидеть ка формируется табоица algoResults? Но она получается из dll. Это простая таблица в которой накопленный объем по цене.<br />Далее они просто выводятся.<br /><br />В Вашем примере, данные не получаются онлайн. Вы их вывели по данным прошлых свечек. А значит, при первом вызове OnCalculate, все данные для линий получены. При установке индикатора OnCalculate вызывается же два раза. Хотя зачем?<br /><br />Делаю предположение, что это как-то связано. <br /><br />Вот, для примера, испорченный индикатор горизонтальных объемов. Он реализует такой же алгоритм, получая данные из свечек, а не из dll.<br />В таком варианте он не работает как надо:<br />
====code====
<pre>--logfile=io.open(getWorkingFolder().."&#92;&#92;LuaIndicators&#92;&#92;priceAvgProfile.txt", "w")

Settings={}
Settings.period = 150
Settings.shift = 100
Settings.Name = "*priceAvgProfile"
Settings.weeks = 0 -- 1 - текущая, отрицательное число - сколько прошлых недель, включая текущую
Settings.fixShift = 1 -- 1 - всегда смещено на указанное количество shift, если 0, то будет смещено на дату начала неделеи расчета
Settings.showMaxLine = 1
---------------------------------------------------------------------------------------

lines = 100
scale = 2
min_price_step = 1

function Init()
&nbsp;&nbsp;&nbsp;&nbsp;Settings.line = {}
&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;1&#93; = {}
&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;1&#93; = {Name = 'maxVol', Color = RGB(255, 128, 64), Type = TYPE_LINE, Width = 2}
&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, lines do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;i+1&#93; = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;i+1&#93; = {Color = RGB(185, 185, 185), Type = TYPE_LINE, Width = 2}
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;myFFF = FFF()
&nbsp;&nbsp;&nbsp;&nbsp;return lines
end

function OnCalculate(index)
&nbsp;&nbsp;&nbsp;&nbsp;if index == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DSInfo = getDataSourceInfo()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min_price_step = getParamEx(DSInfo.class_code, DSInfo.sec_code, "SEC_PRICE_STEP").param_value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scale = getSecurityInfo(DSInfo.class_code, DSInfo.sec_code).scale
&nbsp;&nbsp;&nbsp;&nbsp;end 
&nbsp;&nbsp;&nbsp;&nbsp;return myFFF(index, Settings)
end

---------------------------------------------------------------------------------------
function FFF()

&nbsp;&nbsp;&nbsp;&nbsp;local cacheL={}
&nbsp;&nbsp;&nbsp;&nbsp;local cacheH={}
&nbsp;&nbsp;&nbsp;&nbsp;local cacheC={}
&nbsp;&nbsp;&nbsp;&nbsp;local weeksBegin={}
&nbsp;&nbsp;&nbsp;&nbsp;local maxPriceLine={}

&nbsp;&nbsp;&nbsp;&nbsp;local outlines = {}
&nbsp;&nbsp;&nbsp;&nbsp;local calculated_buffer={}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return function(ind, Fsettings)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local period = Fsettings.period or 150
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local shift = Fsettings.shift or 150
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local weeks = Fsettings.weeks or 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local fixShift = Fsettings.fixShift or 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local showMaxLine = Fsettings.showMaxLine or 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local bars = 50

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shift = math.max(bars+1, shift)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local index = ind

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if index == 1 then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxPriceLine = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;weeksBegin = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheL = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheL&#91;index&#93; = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheH = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheH&#91;index&#93; = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheC = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheC&#91;index&#93; = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calculated_buffer = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines = {}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--maxPriceLine&#91;index&#93; = maxPriceLine&#91;index-1&#93; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheL&#91;index&#93; = cacheL&#91;index-1&#93; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheH&#91;index&#93; = cacheH&#91;index-1&#93; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheC&#91;index&#93; = cacheC&#91;index-1&#93; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not CandleExist(index) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return maxPriceLine&#91;index&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheH&#91;index&#93; = H(index)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheL&#91;index&#93; = L(index)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cacheC&#91;index&#93; = C(index)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if T(index).week_day&#60;T(index-1).week_day or T(index).year&#62;T(index-1).year then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;weeksBegin&#91;#weeksBegin+1&#93; = index
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if index &#60; Size() then return nil end&nbsp;&nbsp; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if calculated_buffer&#91;index&#93; ~= nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return maxPriceLine&#91;index&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if showMaxLine==1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift-1, 1, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift,&nbsp;&nbsp; 1, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i=1,#outlines do&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift-1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i+1, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i+1, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(outlines&#91;i&#93;.index,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i+1, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.index = index-shift
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.val = nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&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;local beginIndex = index-period
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if weeks == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beginIndex = weeksBegin&#91;#weeksBegin&#93; or beginIndex
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if weeks &#60; 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beginIndex = weeksBegin&#91;#weeksBegin+weeks&#93; or beginIndex
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if fixShift==0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shift = math.max(bars+1, index-beginIndex)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--WriteLog('weeks '..tostring(weeks)..' last '..tostring(weeksBegin&#91;#weeksBegin&#93;)..' beginIndex '..tostring(beginIndex))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local maxPrice = math.max(unpack(cacheH,math.max(beginIndex, 1),index))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local minPrice = math.min(unpack(cacheL,math.max(beginIndex, 1),index))&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;&nbsp;local priceProfile = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--local clasterStep = math.max((maxPrice - minPrice)/lines, min_price_step)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--local clasterStep = (maxPrice - minPrice)/lines
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local clasterStep = 10*min_price_step

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--WriteLog('minPrice '..tostring(minPrice)..' maxPrice '..tostring(maxPrice)..' clasterStep '..tostring(clasterStep))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i = 0, (index-beginIndex) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if CandleExist(index-i) then&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;&nbsp;&nbsp;&nbsp;local barSteps = math.max(math.ceil((H(index-i) - L(index-i))/clasterStep),1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for j=0,barSteps-1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local clasterPrice = math.floor((L(index-i) + j*clasterStep)/clasterStep)*clasterStep
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local clasterIndex = clasterPrice*math.pow(10, scale)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if priceProfile&#91;clasterIndex&#93; == nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;priceProfile&#91;clasterIndex&#93; = {price = clasterPrice, vol = 0}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;priceProfile&#91;clasterIndex&#93;.vol = priceProfile&#91;clasterIndex&#93;.vol + V(index-i)/barSteps
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--------------------
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local MAXV = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local maxPrice = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local maxCount = 0 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local sortedProfile = {}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i, profileItem in pairs(priceProfile) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAXV=math.max(MAXV,profileItem.vol)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if MAXV == profileItem.vol then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxPrice=profileItem.price
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxCount = maxCount + 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortedProfile&#91;maxCount&#93; = {price = profileItem.price, vol = profileItem.vol}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--WriteLog('maxV '..tostring(MAXV)..' tblMax '..tostring(sortedProfile&#91;1&#93;.vol))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if maxPrice == 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxPrice = O(index) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.sort(sortedProfile, function(a,b) return (a&#91;'vol'&#93; or 0) &#62; (b&#91;'vol'&#93; or 0) end)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---------------------
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i=1,lines do&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if sortedProfile&#91;i&#93;~=nil then&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;&nbsp;outlines&#91;i&#93; = {index = index-shift+bars, val = maxPrice}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortedProfile&#91;i&#93;.vol=math.floor(sortedProfile&#91;i&#93;.vol/MAXV*bars)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if sortedProfile&#91;i&#93;.vol&#62;0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.index = index-shift+sortedProfile&#91;i&#93;.vol
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.val = sortedProfile&#91;i&#93;.price&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i+1, outlines&#91;i&#93;.val)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(outlines&#91;i&#93;.index, i+1, outlines&#91;i&#93;.val)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--WriteLog('line '..tostring(i).." price "..tostring(GetValue(index-shift, i)).." - "..tostring(GetValue(outlines&#91;i&#93;.index, i)).." vol "..tostring(outlines&#91;i&#93;.index-index+shift))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if showMaxLine==1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift, 1, maxPrice)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxPriceLine&#91;index&#93; = maxPrice
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calculated_buffer&#91;index&#93; = true
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return maxPriceLine&#91;index&#93;
&nbsp;&nbsp;&nbsp;&nbsp;end
end

function WriteLog(text)

&nbsp;&nbsp;&nbsp;&nbsp;logfile:write(tostring(os.date("%c",os.time())).." "..text.."&#92;n");
&nbsp;&nbsp;&nbsp;&nbsp;logfile:flush();
&nbsp;&nbsp;&nbsp;&nbsp;LASTLOGSTRING = text;
 
end</pre>
============= <br />
			<i>19.10.2018 18:31:35, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34479/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34479/topic4023/</guid>
			<pubDate>Fri, 19 Oct 2018 18:31:35 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34478/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_yMSiGFe0" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a>, <br />В том то и дело, что Вы привели не полную версию кода, в связи с чем о многом приходится догадываться.<br />Выводить значения всех линий вовсе не обязательно. ниже пример который явно это показывает:<br /><table class="forum-spoiler"><thead onclick="if (this.nextSibling.style.display=='none') { this.nextSibling.style.display=''; BX.addClass(this, 'forum-spoiler-head-open'); } else { this.nextSibling.style.display='none'; BX.removeClass(this, 'forum-spoiler-head-open'); } BX.onCustomEvent('BX.Forum.Spoiler:toggle', [{node: this}]); event.stopPropagation();"><tr><th><div>Скрытый текст</div></th></tr></thead><tbody class="forum-spoiler" style="display:none;"><tr><td>
====code====
<pre>Settings = {
Name = "*TEST", 
line = {{Name = "line 1", Color = RGB(255, 0, 0)},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{Name = "line 2", Color = RGB(0, 255, 0)}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}

function Init() 
&nbsp;&nbsp;&nbsp;return 2
end

function OnCalculate(Index)
&nbsp;&nbsp;&nbsp;if (Index &#62;= 10) and (Index &#60; 20) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 4320
&nbsp;&nbsp;&nbsp;elseif (Index &#62;= 20) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 4320, 4325
&nbsp;&nbsp;&nbsp;end
end</pre>
=============
</td></tr></tbody></table><br /><br />результат:<br />[FILE ID=5448] <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=5448&" width="1010" height="411" /><br /><i>19.10.2018 17:44:18, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34478/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34478/topic4023/</guid>
			<pubDate>Fri, 19 Oct 2018 17:44:18 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34472/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Инициализация производится на полные 150 линий<br /><br />вот же<br />
====code====
<pre>lines = 150
min_price_step = 1
scale = 2

function Init()
&nbsp;&nbsp;&nbsp;&nbsp;Settings.line = {}
&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, lines do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;i&#93; = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;i&#93; = {Color = RGB(185, 185, 185), Type = TYPE_LINE, Width = 2}
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;algoF = getResults()
&nbsp;&nbsp;&nbsp;&nbsp;return lines
end</pre>
=============
<br />Проблема именно в том, что если выводить линии не все сразу, они почему-то потом не показываются, а только те, что имели значение при запуске.<br />Далее, по мере поступления новых данных (цена же двигается и торовый диапазон расширяется) в таблицу algoResults, надо выводить новые линии, но они не показываются. Именно визуально не видны, но при этом, что очень странно, GetValue возвращает значение.<br /><br />Как написал выше, пришлось выводить ненулевые значения для каждой линии, накладывая одну на другую. Так работает. <br />
			<i>19.10.2018 10:22:32, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34472/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34472/topic4023/</guid>
			<pubDate>Fri, 19 Oct 2018 10:22:32 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34464/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_sDT2ZWpU" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br />Код простой.<br />=============<br />Это не полная версия кода.<br />В результате многое не понятно.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_YLfqnHGR" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br />Если было выведено при инициализации 100 линий (т.е. когда происходит первый вызов OnCalculate), то больше не показывает индикатор.<br />=============<br />Да так и было задумано.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_3bSWv2Kv" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br />Приходится выводить всегда столько линий, сколько определено, накладывая одну на другую, чтобы они слились в одну для пользователя.<br />=============<br />Вы можете вывести меньше линий, остальные будут существовать но не отобразятся пока Вы их не выведите.<br />Выводить больше линий чем в Init() нельзя. <br />
			<i>18.10.2018 21:40:17, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34464/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34464/topic4023/</guid>
			<pubDate>Thu, 18 Oct 2018 21:40:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34463/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Приходится выводить всегда столько линий, сколько определено, накладывая одну на другую, чтобы они слились в одну для пользователя.<br />По мере поступления новых линий они будут тогда уже распределятся по уровням цены. <br />
			<i>18.10.2018 20:59:03, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34463/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34463/topic4023/</guid>
			<pubDate>Thu, 18 Oct 2018 20:59:03 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34462/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Нет, не помогает и такое решение.<br /><br />Если было выведено при инициализации 100 линий (т.е. когда происходит первый вызов OnCalculate), то больше не показывает индикатор.<br />Далее линии вроде имеют значение, но не видны. <br />
			<i>18.10.2018 20:50:17, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34462/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34462/topic4023/</guid>
			<pubDate>Thu, 18 Oct 2018 20:50:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34459/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_12dXj3NW" href="/user/17/" bx-tooltip-user-id="17">Sergey Gorokhov</a> написал:<br />Здравствуйте,<br />Приведите полную версию кода.<br />=============<br />Здравствуйте.<br /><br />Код простой.<br />
====code====
<pre>require("StaticVar")

Settings ={
&nbsp;&nbsp;&nbsp;&nbsp;Name = "*priceProfile",
&nbsp;&nbsp;&nbsp;&nbsp;shift = 150,
&nbsp;&nbsp;&nbsp;&nbsp;ChartId = "Sheet11"
}&nbsp;&nbsp; 

lines = 150
min_price_step = 1
scale = 2

function Init()
&nbsp;&nbsp;&nbsp;&nbsp;Settings.line = {}
&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, lines do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;i&#93; = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;i&#93; = {Color = RGB(185, 185, 185), Type = TYPE_LINE, Width = 2}
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;algoF = getResults()
&nbsp;&nbsp;&nbsp;&nbsp;return lines

end

function getResults()
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;local outlines = {}
&nbsp;&nbsp;&nbsp;&nbsp;local priceProfile = {}
&nbsp;&nbsp;&nbsp;&nbsp;local tmpOutlines = {}

&nbsp;&nbsp;&nbsp;&nbsp;return function(index, Fsettings)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local shift = Fsettings.shift or 150
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local bars = 50

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if index == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpOutlines = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i=1,lines do --необходимо вывести все линии хотя бы один раз, чтобы потом они отображались без проблем&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpOutlines&#91;i&#93; = O(Size())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return unpack(tmpOutlines)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if index == 2 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i=1,lines do&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(1,i,nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if index == Size() then
&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;&nbsp;&nbsp;&nbsp;stv.UseNameSpace(Fsettings.ChartId)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;algoResults = stv.GetVar('priceProfile')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;priceProfile = {}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if algoResults ~= nil and type(algoResults) == "table" then 
&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;&nbsp;&nbsp;&nbsp;for i=1,#outlines do&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;&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;SetValue(index-shift-1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i, nil)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(outlines&#91;i&#93;.index,&nbsp;&nbsp; i, nil)
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.index = index-shift
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93;.val = nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&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;local MAXV = 0
&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;&nbsp;&nbsp;&nbsp;local maxCount = 0 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i, profileItem in pairs(algoResults) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAXV=math.max(MAXV,profileItem.vol)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxCount = maxCount + 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;priceProfile&#91;maxCount&#93; = {price = profileItem.price, vol = profileItem.vol}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&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;&nbsp;&nbsp;&nbsp;table.sort(priceProfile, function(a,b) return (a&#91;'vol'&#93; or 0) &#62; (b&#91;'vol'&#93; or 0) end)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i=1,math.min(#priceProfile, lines) do&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;&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;&nbsp;&nbsp;if priceProfile&#91;i&#93;~=nil then
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outlines&#91;i&#93; = {index = index-shift, val = nil}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;priceProfile&#91;i&#93;.vol=math.floor(priceProfile&#91;i&#93;.vol/MAXV*bars)
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if priceProfile&#91;i&#93;.vol&#62;0 then
&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;outlines&#91;i&#93;.index = index-shift+priceProfile&#91;i&#93;.vol
&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;outlines&#91;i&#93;.val = priceProfile&#91;i&#93;.price&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(index-shift,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i, outlines&#91;i&#93;.val)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetValue(outlines&#91;i&#93;.index, i, outlines&#91;i&#93;.val)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&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;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil
&nbsp;&nbsp;&nbsp;&nbsp;end
end</pre>
============= <br />
			<i>18.10.2018 19:40:39, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34459/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34459/topic4023/</guid>
			<pubDate>Thu, 18 Oct 2018 19:40:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34458/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте,<br />Приведите полную версию кода. <br />
			<i>18.10.2018 19:34:07, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34458/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34458/topic4023/</guid>
			<pubDate>Thu, 18 Oct 2018 19:34:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Динамическое количество линий индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message34455/topic4023/">Динамическое количество линий индикатора</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br /><br />Т.к. в индикаторе необходимо при инициализации указывать количество возвращаемых линий, то написана такая конструкция в функции init:<br />
====code====
<pre>for i = 1, lines do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;i&#93; = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Settings.line&#91;i&#93; = {Color = RGB(185, 185, 185), Type = TYPE_LINE, Width = 2}
&nbsp;&nbsp;&nbsp;&nbsp;end</pre>
=============
Алгоритм вводит линии по мере наполнения массива линий. Сначала их может быть 20, потом уже 100 и т.д. Для оптимизации линии выводятся только с не пустым значением.<br /><br />Все бы хорошо, но заметил такую особенность (версия 7.19), если не вывести хотя бы один раз все линиий с не пустым значением, то потом они не отображаются на графике, хотя функция GetValue возвращает значение. Я долго не мог понять почему у меня линии не показываются с течением времени, а если заново инициализировать индикатор (через параметры графика), то все на месте.<br /><br />Пришлось сделать такой странный костыль:<br />
====code====
<pre>if index == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;tmpOutlines = {}
&nbsp;&nbsp;&nbsp;&nbsp;for i=1,lines do --необходимо вывести все линии хотя бы один раз, чтобы потом они отображались без проблем&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmpOutlines&#91;i&#93; = O(Size())
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return unpack(tmpOutlines)
end
if index == 2 then
&nbsp;&nbsp;&nbsp;&nbsp;for i=1,lines do&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;SetValue(1,i,nil)
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return nil
end</pre>
============= <br />
			<i>18.10.2018 19:12:22, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message34455/topic4023/</link>
			<guid>http://forum.quik.ru/messages/forum10/message34455/topic4023/</guid>
			<pubDate>Thu, 18 Oct 2018 19:12:22 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
