<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: CandleExist не работает - можно привести рабочий и простой пример?]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме CandleExist не работает - можно привести рабочий и простой пример? форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 03 May 2026 00:34:05 +0300</pubDate>
		<item>
			<title>CandleExist не работает - можно привести рабочий и простой пример?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69454/topic8046/">CandleExist не работает - можно привести рабочий и простой пример?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Хочу написать свой первый простой индикатор на Lua.<br />Расчет истореский волатильности (HV).<br />Текущую свечку делить на предыдущую свечку. Дальше буду дописывать более крутые формулы.<br /><br />И методом тыка обнаружил эту брешь, что при возникновении пустых свечек на графике (если график так настроен), нужна чисто для лаконичности и не более, функция CandleExist, чтобы просто игнорировать пустые свечки.<br /><br />Но выяснилось, что есть рабочий вариант. В примере к функции CandleExist в документации он дан.<br />И там технически этот расчет индикатора выглядит &nbsp;уже совсем иначе. Через сбор данных в локальный массив и вот это всё. И только в том варианте CandleExist работает.<br />А более &quot;тупом&quot; варианте как выше, почему-то нет.<br /><br />Вопрос в принципе исчерпан, разобрался, у меня работает.<br /><br />Но какая-то прострация от всего происходящего осталась.<br />Тут функция работает, там нет.<br />Функция одна и та же. <br />
			<i>10.05.2023 18:02:24, A.T..</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69454/topic8046/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69454/topic8046/</guid>
			<pubDate>Wed, 10 May 2023 18:02:24 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CandleExist не работает - можно привести рабочий и простой пример?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69388/topic8046/">CandleExist не работает - можно привести рабочий и простой пример?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_pteAOcOJ" href="/user/1338/" bx-tooltip-user-id="1338">A.T.</a> написал:<br />Начнем с того, что Candle не может Exist. Оно может только Exists.<br />Поэтому первая и очевидная ошибка для пишущего программиста, о которой выясняется только наступив на грабли.<br /><br />Это к уровню знания английского и камень в огород разработчиков.<br /><br />Второе и самое главное.<br />Можно привести простой(!!!) - это ключевое слово - простой и очевидный пример.<br />Кто нибудь, пожалуйста.<br /><br />Хочу написать что-то вроде<br /><br /><br /> 
====code====
<pre>&nbsp;&nbsp; function&nbsp;&nbsp; OnCalculate (idx)&nbsp;&nbsp; -- вход 

 if&nbsp;&nbsp;CandleExist(idx)&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; true&nbsp;&nbsp; then&nbsp;&nbsp;&nbsp;&nbsp;-- имеется в виду если свечка существует на графике, то есть ее какой-нибудь O(idx) ~= nil 
&nbsp;&nbsp;&nbsp;&nbsp;бла - бла - бла расчеты с переменными
 end&nbsp;&nbsp; -- мне даже else тут не нужен, вместо него или nil или молчаливый игнор свечки 

 end&nbsp;&nbsp; </pre>
=============
 <br />Всё. То есть просто отсеивать ошибку не существования свечки на графике с &nbsp;галкой &quot;Показывать пустые интервалы&quot;.<br />Пользователя бывают дятлы.<br /><br />Без интервалов, конечно, все прекрасно работает.<br /><br />Симптом: Квик упорно игнорирует условие CandleExist(idx) и залезает во внутрь бла-бла и как итог появляется ошибка с красным крестом attempt to perform arithmetic on a nil value, чего быть не должно.<br />Смысл только в подавлении этой ошибки наименьшим фильтром и геморроем для программиста.<br />Вопрос только в этом.<br />В документации какой-то ад.<br />Хочу простой игнор свечки по простому условию.<br /><br /><br />Не работающий пример из примера документации:<br /><br /> 
====code====
<pre>&nbsp;&nbsp;Settings = {}
Settings.Name&nbsp;&nbsp;=&nbsp;&nbsp; "SimpleMA" 
Settings.mode&nbsp;&nbsp;=&nbsp;&nbsp; "C" 
Settings.period&nbsp;&nbsp;=&nbsp;&nbsp; 5 
Settings.str_field&nbsp;&nbsp;=&nbsp;&nbsp; "STRING field" 
 
 
 function&nbsp;&nbsp; dValue (i,param)
&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;v&nbsp;&nbsp;=&nbsp;&nbsp;param&nbsp;&nbsp;or&nbsp;&nbsp; "C" 
&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;v&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; "O"&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;O(i)
&nbsp;&nbsp;&nbsp;&nbsp; elseif&nbsp;&nbsp;v&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; "H"&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;H(i)
&nbsp;&nbsp;&nbsp;&nbsp; elseif&nbsp;&nbsp;v&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; "L"&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;L(i)
&nbsp;&nbsp;&nbsp;&nbsp; elseif&nbsp;&nbsp;v&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; "C"&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;C(i)
&nbsp;&nbsp;&nbsp;&nbsp; elseif&nbsp;&nbsp;v&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; "V"&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;V(i)
&nbsp;&nbsp;&nbsp;&nbsp; elseif&nbsp;&nbsp;v&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; "M"&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;(H(i)&nbsp;&nbsp;+&nbsp;&nbsp;L(i))/ 2 
&nbsp;&nbsp;&nbsp;&nbsp; elseif&nbsp;&nbsp;v&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; "T"&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;(H(i)&nbsp;&nbsp;+&nbsp;&nbsp;L(i) + C(i))/ 3 
&nbsp;&nbsp;&nbsp;&nbsp; elseif&nbsp;&nbsp;v&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; "W"&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;(H(i)&nbsp;&nbsp;+&nbsp;&nbsp;L(i) +&nbsp;&nbsp;2&nbsp;&nbsp;* C(i))/ 4 
&nbsp;&nbsp;&nbsp;&nbsp; else 
&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;C(i)
&nbsp;&nbsp;&nbsp;&nbsp; end 
 end 

 function&nbsp;&nbsp; Init ()
&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; 1 
 end 

 function&nbsp;&nbsp; OnCalculate (idx)
 if&nbsp;&nbsp;CandleExist(idx)&nbsp;&nbsp;then&nbsp;&nbsp;&nbsp;&nbsp; -- добавляю тут это и намеренно делаю пустые интервалы в квике 

&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;per&nbsp;&nbsp;=&nbsp;&nbsp;Settings.period
&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;mode&nbsp;&nbsp;=&nbsp;&nbsp;Settings.mode
&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;lValue&nbsp;&nbsp;=&nbsp;&nbsp;iValue
&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;idx&nbsp;&nbsp;&#62;&nbsp;&nbsp;=&nbsp;&nbsp;per&nbsp;&nbsp;then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;ma_value =&nbsp;&nbsp;0 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for&nbsp;&nbsp;j&nbsp;&nbsp;=&nbsp;&nbsp;(idx - per) +&nbsp;&nbsp;1 , idx&nbsp;&nbsp;do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- и он все равно лезет в эту ветку 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ma_value&nbsp;&nbsp;=&nbsp;&nbsp;ma_value + dValue(j, mode)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;ma_value/per
&nbsp;&nbsp;&nbsp;&nbsp; else 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; nil 
&nbsp;&nbsp;&nbsp;&nbsp; end 

 end 
 end&nbsp;&nbsp; </pre>
=============
 <br /><br /><br />Опыт программирования именно на Lua - меньше недели.<br />C/C++ и C# знаю хорошо.<br /><br />Спасибо.<br />=============<br />Напишите , что Вы хотите делать русскими словами, &nbsp; напишу, как это сделать в индикаторе на луа. <br />
			<i>06.05.2023 18:05:48, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69388/topic8046/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69388/topic8046/</guid>
			<pubDate>Sat, 06 May 2023 18:05:48 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CandleExist не работает - можно привести рабочий и простой пример?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69386/topic8046/">CandleExist не работает - можно привести рабочий и простой пример?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Начнем с того, что Candle не может Exist. Оно может только Exists.<br />Поэтому первая и очевидная ошибка для пишущего программиста, о которой выясняется только наступив на грабли.<br /><br />Это к уровню знания английского и камень в огород разработчиков.<br /><br />Второе и самое главное.<br />Можно привести простой(!!!) - это ключевое слово - простой и очевидный пример.<br />Кто нибудь, пожалуйста.<br /><br />Хочу написать что-то вроде<br /><br /><br />
====code====
<pre>function OnCalculate(idx)&nbsp;&nbsp;-- вход

if CandleExist(idx) == true then&nbsp;&nbsp;-- имеется в виду если свечка существует на графике, то есть ее какой-нибудь O(idx) ~= nil
&nbsp;&nbsp;&nbsp;&nbsp;бла-бла-бла расчеты с переменными
end -- мне даже else тут не нужен, вместо него или nil или молчаливый игнор свечки

end</pre>
=============
<br />Всё. То есть просто отсеивать ошибку не существования свечки на графике с &nbsp;галкой &quot;Показывать пустые интервалы&quot;.<br />Пользователя бывают дятлы.<br /><br />Без интервалов, конечно, все прекрасно работает.<br /><br />Симптом: Квик упорно игнорирует условие CandleExist(idx) и залезает во внутрь бла-бла и как итог появляется ошибка с красным крестом attempt to perform arithmetic on a nil value, чего быть не должно.<br />Смысл только в подавлении этой ошибки наименьшим фильтром и геморроем для программиста.<br />Вопрос только в этом.<br />В документации какой-то ад.<br />Хочу простой игнор свечки по простому условию.<br /><br /><br />Не работающий пример из примера документации:<br /><br />
====code====
<pre>Settings={}
Settings.Name = "SimpleMA"
Settings.mode = "C"
Settings.period = 5
Settings.str_field = "STRING field"
 
 
function dValue(i,param)
&nbsp;&nbsp;&nbsp;&nbsp;local v = param or "C"
&nbsp;&nbsp;&nbsp;&nbsp;if v == "O" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return O(i)
&nbsp;&nbsp;&nbsp;&nbsp;elseif v == "H" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return H(i)
&nbsp;&nbsp;&nbsp;&nbsp;elseif v == "L" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return L(i)
&nbsp;&nbsp;&nbsp;&nbsp;elseif v == "C" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return C(i)
&nbsp;&nbsp;&nbsp;&nbsp;elseif v == "V" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return V(i)
&nbsp;&nbsp;&nbsp;&nbsp;elseif v == "M" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (H(i) + L(i))/2
&nbsp;&nbsp;&nbsp;&nbsp;elseif v == "T" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (H(i) + L(i)+C(i))/3
&nbsp;&nbsp;&nbsp;&nbsp;elseif v == "W" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (H(i) + L(i)+2*C(i))/4
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;return C(i)
&nbsp;&nbsp;&nbsp;&nbsp;end
end

function Init()
&nbsp;&nbsp;&nbsp;&nbsp;return 1
end

function OnCalculate(idx)
if CandleExist(idx) then&nbsp;&nbsp; -- добавляю тут это и намеренно делаю пустые интервалы в квике

&nbsp;&nbsp;&nbsp;&nbsp;local per = Settings.period
&nbsp;&nbsp;&nbsp;&nbsp;local mode = Settings.mode
&nbsp;&nbsp;&nbsp;&nbsp;local lValue = iValue
&nbsp;&nbsp;&nbsp;&nbsp;if idx &#62;= per then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local ma_value=0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for j = (idx-per)+1, idx do&nbsp;&nbsp;&nbsp;&nbsp;-- и он все равно лезет в эту ветку
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ma_value = ma_value+dValue(j, mode)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ma_value/per
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil
&nbsp;&nbsp;&nbsp;&nbsp;end

end
end</pre>
=============
<br /><br /><br />Опыт программирования именно на Lua - меньше недели.<br />C/C++ и C# знаю хорошо.<br /><br />Спасибо. <br />
			<i>06.05.2023 13:32:50, A.T..</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69386/topic8046/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69386/topic8046/</guid>
			<pubDate>Sat, 06 May 2023 13:32:50 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
