<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Индикаторы. OnCalculate. Количество полных проходов по всем свечам]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Индикаторы. OnCalculate. Количество полных проходов по всем свечам форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 12 Apr 2026 22:08:48 +0300</pubDate>
		<item>
			<title>Индикаторы. OnCalculate. Количество полных проходов по всем свечам</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74120/topic8477/">Индикаторы. OnCalculate. Количество полных проходов по всем свечам</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_95MtYFnk" href="/user/11649/" bx-tooltip-user-id="11649">Илья</a>, это Вам ещё везёт, что свечи номера не меняют от прохода к проходу, как <noindex><a href="https://forum.quik.ru/forum13/topic8108/" target="_blank" rel="nofollow">тут</a></noindex><br />Так-то стандартная идиома получается приводить индикатор к дефолтному состоянию при I == 1, но индексировать ничего по номеру свечи нельзя, если несколько инструментов на одном графике (поэтому я использую время) <br />
			<i>31.01.2024 01:34:13, funduk.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74120/topic8477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74120/topic8477/</guid>
			<pubDate>Wed, 31 Jan 2024 01:34:13 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Индикаторы. OnCalculate. Количество полных проходов по всем свечам</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74098/topic8477/">Индикаторы. OnCalculate. Количество полных проходов по всем свечам</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_qwNIGCZt" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/15542/" target="_blank" rel="nofollow">Anton Belonogov</a></noindex> написал:<br /> <noindex><a href="/user/11649/" target="_blank" rel="nofollow">Илья</a></noindex> ,<br /><br />Действительно, в описанных Вами ситуациях вызов OnCalculate происходит дважды.<br />Мы исправим данную ошибку в одной из очередных версий ПО.<br />=============<br /> Это сейчас серьезно? Почему же все эти годы не исправлялось. Сообщения были об этом очень-очень давно.<br />=============<br />Вполне серьезно. проблема была выявлена при появлении VMLua &nbsp;в КВИКЕ.<br />Пришлось сделать костыли. <br />
			<i>29.01.2024 16:33:04, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74098/topic8477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74098/topic8477/</guid>
			<pubDate>Mon, 29 Jan 2024 16:33:04 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Индикаторы. OnCalculate. Количество полных проходов по всем свечам</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74096/topic8477/">Индикаторы. OnCalculate. Количество полных проходов по всем свечам</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_lcEQBoH2" href="/user/15542/" bx-tooltip-user-id="15542">Anton Belonogov</a> написал:<br /><noindex><a href="/user/11649/" target="_blank" rel="nofollow">Илья</a></noindex>,<br /><br />Действительно, в описанных Вами ситуациях вызов OnCalculate происходит дважды.<br />Мы исправим данную ошибку в одной из очередных версий ПО.<br /><br />=============<br />Это сейчас серьезно? Почему же все эти годы не исправлялось. Сообщения были об этом очень-очень давно. <br />
			<i>29.01.2024 12:11:16, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74096/topic8477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74096/topic8477/</guid>
			<pubDate>Mon, 29 Jan 2024 12:11:16 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Индикаторы. OnCalculate. Количество полных проходов по всем свечам</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74095/topic8477/">Индикаторы. OnCalculate. Количество полных проходов по всем свечам</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_kew1sVZU" href="/user/11649/" bx-tooltip-user-id="11649">Илья</a>,<br /><br />Действительно, в описанных Вами ситуациях вызов OnCalculate происходит дважды.<br />Мы исправим данную ошибку в одной из очередных версий ПО.<br /><br />Приносим извинения за причиненные неудобства. <br />
			<i>29.01.2024 11:51:34, Anton Belonogov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74095/topic8477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74095/topic8477/</guid>
			<pubDate>Mon, 29 Jan 2024 11:51:34 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Индикаторы. OnCalculate. Количество полных проходов по всем свечам</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74091/topic8477/">Индикаторы. OnCalculate. Количество полных проходов по всем свечам</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_9QTc61Xc" href="/user/11649/" bx-tooltip-user-id="11649">Илья</a>, добрый день.<br /><br />Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ. <br />
			<i>29.01.2024 09:29:41, Anton Belonogov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74091/topic8477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74091/topic8477/</guid>
			<pubDate>Mon, 29 Jan 2024 09:29:41 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Индикаторы. OnCalculate. Количество полных проходов по всем свечам</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74062/topic8477/">Индикаторы. OnCalculate. Количество полных проходов по всем свечам</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			можно еще проще сделать:
====code====
<pre>function OnCalculate(index)
 
&nbsp;&nbsp;if index == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;_ds = getDataSourceInfo()
 --....
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;end
&nbsp;&nbsp;
&nbsp;&nbsp;return 0
&nbsp;&nbsp;
end 


</pre>
=============
вообще не определять, будет глобальным. <br />
			<i>27.01.2024 17:57:58, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74062/topic8477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74062/topic8477/</guid>
			<pubDate>Sat, 27 Jan 2024 17:57:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Индикаторы. OnCalculate. Количество полных проходов по всем свечам</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74059/topic8477/">Индикаторы. OnCalculate. Количество полных проходов по всем свечам</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_1fvxVuQk" href="/user/11649/" bx-tooltip-user-id="11649">Илья</a> написал:<br />Есть ли вариант сохранения состояния расчета между вызовами OnCalculate?<br /><br />Вчера пытался в таблицу Settings &nbsp;добавить свою таблицу рассчитанных при первом проходе значений, чтобы при следующих просто из нее вытащить. Знаю, что в руководстве написано &quot;Типы пользовательских параметров: числа и строки&quot;<br />До перезапуска терминала (накидал скрипт, пока терминал работал), вроде, получилось: значения и сохранялись, и выбирались.<br />Но при последующем запуске терминала выводилась ошибка об отсутствии моей таблицы.<br />Хотел сделать через замыкание, но, опять же, где хранить этот объект?<br />=============<br />Опишите переменную вне функции OnCalculate. &nbsp;<br />Например, у Вас выше написано так:
====code====
<pre>function OnCalculate(index)
&nbsp;&nbsp;
&nbsp;&nbsp;local _ds = nil
&nbsp;&nbsp;
&nbsp;&nbsp;if index == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;_ds = getDataSourceInfo()
 --....
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;end
&nbsp;&nbsp;
&nbsp;&nbsp;return 0
&nbsp;&nbsp;
end 

</pre>
=============
переменная _ds всегда затирается при входе в OnCalculate<br />чтобы этого не было сделайте так:
====code====
<pre>local _ds;
function OnCalculate(index)
&nbsp;&nbsp;if index == 1 then&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;_ds = getDataSourceInfo()
&nbsp;&nbsp;--....
&nbsp;&nbsp;end
 
&nbsp;&nbsp;return 0
&nbsp;&nbsp;
end
</pre>
============= <br />
			<i>27.01.2024 17:06:13, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74059/topic8477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74059/topic8477/</guid>
			<pubDate>Sat, 27 Jan 2024 17:06:13 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Индикаторы. OnCalculate. Количество полных проходов по всем свечам</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74054/topic8477/">Индикаторы. OnCalculate. Количество полных проходов по всем свечам</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_gNRNoWxm" href="/user/11649/" bx-tooltip-user-id="11649">Илья</a> написал:<br />Хотел сделать через замыкание, но, опять же, где хранить этот объект?<br />=============<br />Если речь про хранение между запусками, то во внешнем мире к терминалу.<br />Или, понимая, что вызовов будет не меньше двух, организовать кеш данных, рассчитанных на первом проходе (после применения настроек). Тогда последующий вызов будет &quot;холостым&quot;.<br />Тогда можно будет организовать расчет только один раз. Иногда это существенно ускоряет вывод индикатора на график. <br />
			<i>27.01.2024 10:57:41, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74054/topic8477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74054/topic8477/</guid>
			<pubDate>Sat, 27 Jan 2024 10:57:41 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Индикаторы. OnCalculate. Количество полных проходов по всем свечам</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74053/topic8477/">Индикаторы. OnCalculate. Количество полных проходов по всем свечам</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Есть ли вариант сохранения состояния расчета между вызовами OnCalculate?<br /><br />Вчера пытался в таблицу Settings &nbsp;добавить свою таблицу рассчитанных при первом проходе значений, чтобы при следующих просто из нее вытащить. Знаю, что в руководстве написано &quot;Типы пользовательских параметров: числа и строки&quot;<br />До перезапуска терминала (накидал скрипт, пока терминал работал), вроде, получилось: значения и сохранялись, и выбирались.<br />Но при последующем запуске терминала выводилась ошибка об отсутствии моей таблицы.<br />Хотел сделать через замыкание, но, опять же, где хранить этот объект? <br />
			<i>27.01.2024 10:18:07, Илья.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74053/topic8477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74053/topic8477/</guid>
			<pubDate>Sat, 27 Jan 2024 10:18:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Индикаторы. OnCalculate. Количество полных проходов по всем свечам</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74052/topic8477/">Индикаторы. OnCalculate. Количество полных проходов по всем свечам</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Это такое поведение. Скорее баг, но ему уже лет 10. На графиках с очень большим число баров или на очень сложных &quot;жадных&quot; алгоритмах надо быть аккуратным. <br />
			<i>27.01.2024 09:58:06, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74052/topic8477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74052/topic8477/</guid>
			<pubDate>Sat, 27 Jan 2024 09:58:06 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Индикаторы. OnCalculate. Количество полных проходов по всем свечам</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74047/topic8477/">Индикаторы. OnCalculate. Количество полных проходов по всем свечам</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Доброго времени суток.<br /><br />Вот код примитивного индикатора.<br />
====code====
<pre>name="light"

Settings = {}
Settings.Name = name;
Settings.line = {};
Settings.step = 0
Settings.secId = ''
Settings.size = 0

function OnCalculate(index)
&nbsp;&nbsp;
&nbsp;&nbsp;local _ds = nil
&nbsp;&nbsp;
&nbsp;&nbsp;if index == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;_ds = getDataSourceInfo()
&nbsp;&nbsp;&nbsp;&nbsp;Settings.secId = _ds.sec_code
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;Settings.size = getNumCandles(Settings.secId)&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;Settings.step = Settings.step + 1
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;end

&nbsp;&nbsp;PrintDbgStr('OnCalculate. Settings.secId '..Settings.secId..' Index '..index..' . Step : '..Settings.step..' size : '..Settings.size)
&nbsp;&nbsp;
&nbsp;&nbsp;return 0
&nbsp;&nbsp;
end
--------
function Init()
&nbsp;&nbsp;
&nbsp;&nbsp;local t = Settings.line;
&nbsp;&nbsp;
&nbsp;&nbsp;t&#91;#t+1&#93; = { Name = 'zero', Color = RGB(0,128,255), Type = 0, Width = 1}
&nbsp;&nbsp;
&nbsp;&nbsp;return #t
&nbsp;&nbsp;
end
</pre>
=============
Вопрос такой:<br /><br />Если на график предварительно добавить этот индикатор, то при запуске терминала функция OnCalculate трижды пробегает по всем свечам.<br />Если при запущенном терминале добавить этот индикатор на график, функция OnCalculate пробегает по всем свечам дважды.<br /><br />Функция OnInit всегда запускается один раз.<br /><br />Это баг, фича или где-то настройки какие-то есть?<br /><br />Какие возможны варианты для расчета показателя только один раз?<br /><br />С уважением, Илья <br />
			<i>27.01.2024 00:34:24, Илья.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74047/topic8477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74047/topic8477/</guid>
			<pubDate>Sat, 27 Jan 2024 00:34:24 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
