<?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>Fri, 01 May 2026 11:39:43 +0300</pubDate>
		<item>
			<title>Глобальные переменные индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75713/topic8647/">Глобальные переменные индикатора</a></b> <i>не работает код индикатора на lua при попытке обратится к переменной объявленной в функции Init()</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_WDBYt3s6" href="/user/16545/" bx-tooltip-user-id="16545">zveno013</a> написал:<br />К сожалению я так и не избавился от многократного расчёта индикатора,<br /> <br />=============<br />Это глюк КВИКА. Существует давно и избавиться от него сложно.<br />Можно сделать костыль, но он не удобный. Делал но потом отказался.<br />---------------------<br />Вы очевидно не правильно понимаете работу функции Init<br />Она вызывается один раз при загрузки скрипта.<br />------------------------<br />Надо делать как у меня написано.<br />т е все глобальные переменные надо устанавливать внутри onCalculate <br />в условии равенства индекса 1. <br />
			<i>31.05.2024 07:17:02, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75713/topic8647/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75713/topic8647/</guid>
			<pubDate>Fri, 31 May 2024 07:17:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Глобальные переменные индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75712/topic8647/">Глобальные переменные индикатора</a></b> <i>не работает код индикатора на lua при попытке обратится к переменной объявленной в функции Init()</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			К сожалению я так и не избавился от многократного расчёта индикатора, да еще и с непредсказуемым содержанием переменных объявленных в функции <I>Init()<br /></I>А вот если раскомментировать присвоение переменным <B>a</B> и<B> b, </B>то переменные каждый проход равны.<br />На скриншоте многократный вывод<I> message()</I> из индикатора, обратите внимание на содержание переменной <B>a.<br /></B>
====code====
<pre>NAME = "KEZ_TEST"
Settings = {Name = NAME,period = 0.01}

function OnCalculate(i)
&nbsp;&nbsp;&nbsp;&nbsp;if i ~= indexZ then -- проверка на повторную итерацию
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexZ = i
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if i == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--a, b = 23, 2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("a = " .. a .. "&#92;nb = " .. b .. "&#92;ni = " .. i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if i == 100 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("a = " .. a .. "&#92;nb = " .. b .. "&#92;ni = " .. i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a = a + Settings.period
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return math.sin(a), b
end

function Init()
&nbsp;&nbsp;&nbsp;&nbsp;indexZ = 0
&nbsp;&nbsp;&nbsp;&nbsp;a = 0
&nbsp;&nbsp;&nbsp;&nbsp;b = 0
&nbsp;&nbsp;&nbsp;&nbsp;local t = {}
&nbsp;&nbsp;&nbsp;&nbsp;Settings.line = t;
&nbsp;&nbsp;&nbsp;&nbsp;t&#91;#t + 1&#93; = {Name = "A",Color = RGB(0, 139, 139),Type = TYPE_LINE,Width = 1}
&nbsp;&nbsp;&nbsp;&nbsp;t&#91;#t + 1&#93; = {Name = "B",Color = RGB(255, 127, 80),Type = TYPE_LINE,Width = 1}
&nbsp;&nbsp;&nbsp;&nbsp;return #t
end

</pre>
=============
<B><br /></B> <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=12025&" width="467" height="161" /><br /><i>30.05.2024 22:53:23, zveno013.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75712/topic8647/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75712/topic8647/</guid>
			<pubDate>Thu, 30 May 2024 22:53:23 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Глобальные переменные индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75705/topic8647/">Глобальные переменные индикатора</a></b> <i>не работает код индикатора на lua при попытке обратится к переменной объявленной в функции Init()</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_RpAHGI6P" href="/user/16545/" bx-tooltip-user-id="16545">zveno013</a> написал:<br /><br />Добавлю в вопросу глобальных переменных еще один:<br /> Возможен ли доступ к глобальной переменной индикатора из скрипта lua &nbsp;и какими методами? (подразумевается обращение по индификатору)<br />=============<br />Предлагаю уточнить терминологию.<br />---------------- <br />глобальные переменные есть в языке Луа, но не в индикаторе.<br />В индикаторе есть настраиваемые параметры, которые задаются в массиве settings <br />и которые можно изменять на графике через функцию окна редактирования.<br />------------------<br />Значения самого индикатора можно читать в других индикаторах с графика, если присвоить индикатору метку (см. док на библиотеку QLua)<br />================ &nbsp;<br />Поясните свой вопрос подробнее, можно с примером. <br />
			<i>29.05.2024 16:40:02, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75705/topic8647/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75705/topic8647/</guid>
			<pubDate>Wed, 29 May 2024 16:40:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Глобальные переменные индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75704/topic8647/">Глобальные переменные индикатора</a></b> <i>не работает код индикатора на lua при попытке обратится к переменной объявленной в функции Init()</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<B>funduk</B> и <B>nikolz, </B>большое спасибо за оперативную помощь!<br /><br />Предложение отслеживать повторную итерацию с тем же <B>index</B> свечи хорошее, если только не предложенный пример... &nbsp;<img src="http://forum.quik.ru/upload/main/smiles/5/icon_neutral.png" border="0" data-code=":unamused:" data-definition="SD" alt=":unamused:" style="width:16px;height:16px;" title="Нет слов" class="bx-smile" /> <br /><br />Пример предложенный<B> nikolz </B>работает <U>без повторных итераций</U>! <noindex><a href="https://forum.quik.ru/messages/forum10/message75702/topic8647/#message75702" target="_blank" rel="nofollow">Код</a></noindex> заработал без изменений с выводом одного ожидаемого сообщения.<br />Чуть позже поэкспериментирую и отпишусь, с целью показать разбор своих ошибок.<br /><br />Добавлю в вопросу глобальных переменных еще один:<br /><U>Возможен ли доступ к глобальной переменной индикатора из скрипта lua </U>и какими методами? (подразумевается обращение по индификатору) <br />
			<i>29.05.2024 13:21:05, zveno013.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75704/topic8647/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75704/topic8647/</guid>
			<pubDate>Wed, 29 May 2024 13:21:05 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Глобальные переменные индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75702/topic8647/">Глобальные переменные индикатора</a></b> <i>не работает код индикатора на lua при попытке обратится к переменной объявленной в функции Init()</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			попробуйте так ( переписал Ваш скрипт, но не проверял.)
====code====
<pre>name="KEZ_Casper"
Settings={Name =name,period = 28,period2 = 28}


function OnCalculate(i)
&nbsp;&nbsp; if i==1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VuEma,Vu,Pu,Pd,F = 1,0,0,0,0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("VuEma = " .. VuEma)
&nbsp;&nbsp; end
&nbsp;&nbsp; local d=C(i)-O(i);
&nbsp;&nbsp; Pu=H(i)-L(i); pd=Pu-d;
&nbsp;&nbsp; if 0&#62;d then&nbsp;&nbsp;d=Pu; Pu=Pd;&nbsp;&nbsp;Pd=d end&nbsp;&nbsp;&nbsp;&nbsp; -- отрицательная свеча
&nbsp;&nbsp;&nbsp;&nbsp;Vd=(Pd*V(i))/(Pu + Pd)
&nbsp;&nbsp;&nbsp;&nbsp;Vu= V(i)-Vd
&nbsp;&nbsp;&nbsp;&nbsp;F=2/(Settings.period + 1)
&nbsp;&nbsp;&nbsp;&nbsp;VuEma = Vu * F + VuEma * (1 - F)
&nbsp;&nbsp;&nbsp;&nbsp;return Vu, -Vd, VuEma
end

function Init()
&nbsp;&nbsp;&nbsp;local t={}&nbsp;&nbsp; Settings.line=t;
&nbsp;&nbsp;&nbsp;&nbsp;t&#91;#t+1&#93;={ Name = "Casper", Color = RGB(255, 0, 0), Type = TYPE_LINE, Width = 1}
&nbsp;&nbsp;&nbsp;&nbsp;t&#91;#t+1&#93;={ Name = "A",&nbsp;&nbsp;&nbsp;&nbsp; Color = RGB(0, 100, 100), Type = TYPE_LINE, Width = 1}
&nbsp;&nbsp;&nbsp;&nbsp;t&#91;#t+1&#93;={ Name = "B",&nbsp;&nbsp;Color = RGB(100, 100, 0),&nbsp;&nbsp;Type = TYPE_LINE,&nbsp;&nbsp;Width = 1}
&nbsp;&nbsp;&nbsp;return #t
end
</pre>
=============
<br /> &nbsp; <br />
			<i>29.05.2024 08:12:09, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75702/topic8647/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75702/topic8647/</guid>
			<pubDate>Wed, 29 May 2024 08:12:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Глобальные переменные индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75701/topic8647/">Глобальные переменные индикатора</a></b> <i>не работает код индикатора на lua при попытке обратится к переменной объявленной в функции Init()</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			VuEma после конца первого прохода OnCalculate остаётся равным последнему значению. Из-за того, что проходов обычно три, следует всё изменяемое состояние индикатора инициализировать внутри условия по == 1. <br />
			<i>29.05.2024 02:14:10, funduk.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75701/topic8647/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75701/topic8647/</guid>
			<pubDate>Wed, 29 May 2024 02:14:10 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Глобальные переменные индикатора</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75700/topic8647/">Глобальные переменные индикатора</a></b> <i>не работает код индикатора на lua при попытке обратится к переменной объявленной в функции Init()</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Не работает код индикатора на lua при попытке обратиться к переменной объявленной в функции Init()<br />Но всё бы ничего, если в одном коде индикатора он работает, а в другом не работает.<br /><br />Вот код индикатора в котором обращение к &nbsp;переменной <B>VuEma</B> Не работает как ожидается:<br />(переменная<B> VuEma </B>в <B>message()</B> выводит 4 раза сообщения вместо мною ожидаемой <B>1</B> один раз.:<br /><B>VuEma = 1</B><br /><B>VuEma = -nan(ind)</B><br /><B>VuEma = -nan(ind)</B><br /><B>VuEma = </B><B>-nan(ind)<br /></B>Как я понимаю индикатор пересчитывается зачем то 4 раза, и лишь первый раз он работает как мне нужно, но в итоге отрисовывается только первые две линии на экране.<br />
====code====
<pre>Settings = {}
Settings = {
&nbsp;&nbsp;&nbsp;&nbsp;Name = "KEZ_Casper",
&nbsp;&nbsp;&nbsp;&nbsp;period = 28,
&nbsp;&nbsp;&nbsp;&nbsp;period2 = 28,
&nbsp;&nbsp;&nbsp;&nbsp;line = {{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "Casper",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(255, 0, 0),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 1
&nbsp;&nbsp;&nbsp;&nbsp;}, {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "A",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(0, 100, 100),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 1
&nbsp;&nbsp;&nbsp;&nbsp;}, {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "B",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(100, 100, 0),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 1
&nbsp;&nbsp;&nbsp;&nbsp;}}
}

function Init()
&nbsp;&nbsp;&nbsp;&nbsp;VuEma = 1
&nbsp;&nbsp;&nbsp;&nbsp;Vu = 0
&nbsp;&nbsp;&nbsp;&nbsp;Pu = 0
&nbsp;&nbsp;&nbsp;&nbsp;Pd = 0
&nbsp;&nbsp;&nbsp;&nbsp;F = 0
&nbsp;&nbsp;&nbsp;&nbsp;return #Settings.line
end

function OnCalculate(index)
&nbsp;&nbsp; if index == 1 then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("VuEma = " .. VuEma)
&nbsp;&nbsp; end

&nbsp;&nbsp;&nbsp;&nbsp;if O(index) &#60; C(index) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- положительная свеча
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pu = H(index) - L(index)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pd = H(index) - C(index) + O(index) - L(index)
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- отрицательная свеча
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pu = H(index) - O(index) + C(index) - L(index) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pd = H(index) - L(index) 
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;Vd = (Pd * V(index)) / (Pu + Pd) 
&nbsp;&nbsp;&nbsp;&nbsp;Vu = V(index) - Vd 
&nbsp;&nbsp;&nbsp;&nbsp;F = 2 / (Settings.period + 1)
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;VuEma = Vu * F + VuEma * (1 - F)

&nbsp;&nbsp;&nbsp;&nbsp;return Vu, -Vd, VuEma
end
</pre>
============= <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=12007&" width="533" height="138" /><br /><i>28.05.2024 23:54:40, zveno013.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75700/topic8647/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75700/topic8647/</guid>
			<pubDate>Tue, 28 May 2024 23:54:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
