<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: описание функции Squeeze]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме описание функции Squeeze форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Tue, 28 Apr 2026 23:43:29 +0300</pubDate>
		<item>
			<title>описание функции Squeeze</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39612/topic4719/">описание функции Squeeze</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_QR2WivcC" href="/user/13069/" bx-tooltip-user-id="13069">Aleksei</a> написал:<br />но судя по формуле вернется 0,т.к (8-8)/2<br />=============<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>dofile(getScriptPath().."&#92;&#92;MA.lua")
tbl = {&#91;1&#93;=5, &#91;2&#93;=3, &#91;3&#93;=4, &#91;4&#93;=9}
function main() 
&nbsp;&nbsp;func = MA()
&nbsp;&nbsp;t_id = AllocTable()
&nbsp;&nbsp;AddColumn(t_id,1,"Price",true,QTABLE_INT_TYPE,10)
&nbsp;&nbsp;AddColumn(t_id,2,"MA",true,QTABLE_INT_TYPE,10)
&nbsp;&nbsp;CreateWindow(t_id)
&nbsp;&nbsp;SetWindowCaption(t_id,"MA")
&nbsp;&nbsp;for i=1,#tbl do
&nbsp;&nbsp; ma_out=func(i, {Period=2, Metod = SMA, VType=ANY}, {&#91;i&#93;=tbl&#91;i&#93;})
&nbsp;&nbsp; tmp=InsertRow(t_id,-1)
&nbsp;&nbsp; SetCell(t_id,tmp,1,tostring(tbl&#91;i&#93;),tbl&#91;i&#93;)
&nbsp;&nbsp; SetCell(t_id,tmp,2,tostring(ma_out),ma_out)
&nbsp;&nbsp;end 
end</pre>
=============
</td></tr></tbody></table><br /><br /><br />на второй итерации sum[Ip]=8, где Ip=1<br />и sum[Ippp] = nil<br />По формуле получается<br />(8 - (nil or 0)) / 2 = (8-0)/2 = 8/2 = 4 <br />
			<i>09.09.2019 16:29:41, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39612/topic4719/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39612/topic4719/</guid>
			<pubDate>Mon, 09 Sep 2019 16:29:41 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>описание функции Squeeze</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39610/topic4719/">описание функции Squeeze</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_bNsTe0FT" href="/user/13069/" bx-tooltip-user-id="13069">Aleksei</a>, <br />Функция нужна только для того чтобы не запоминать все значения в таблицах, а только нужные.<br />Работает просто, есть порядковый индекс I свечки и есть период P за который нужны значения<br />Благодаря функции, вместо того чтобы в таблице sum хранить все значения за все свечки, мы храним для расчетов только значения за несколько последних свечек.<br />Это достигается путем побора индекса через функцию Squeeze <br />
			<i>09.09.2019 15:57:17, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39610/topic4719/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39610/topic4719/</guid>
			<pubDate>Mon, 09 Sep 2019 15:57:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>описание функции Squeeze</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39592/topic4719/">описание функции Squeeze</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			нашел определение <br />
====code====
<pre> function Squeeze(I,P)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return math.fmod(I-1,P+1)
&nbsp;&nbsp;&nbsp;&nbsp;end

</pre>
=============
<p> но появился вопрос. зачем вычитание?<br /></p>
====code====
<pre>sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) / P</pre>
=============
<p></p><p>допустим у нас последовательность</p><p>5, 3, 4, , 9</p><p>период равен 2</p><p>на первом шаге</p><p>Ip = 0, Ipp = 1, Ippp = 2 &nbsp; т.к. fmod(1-1, 2+1) = 0; fmod((1-1)-1, 2+1) = 1; fmod((1-2)-1, 2+1)=2 соответственно </p><p>и sum&#91;0&#93; = 5 return nil</p><p>на втором шаге</p><p>Ip = 1, Ipp = 0, Ippp = 1 &nbsp; т.к. fmod(2-1, 2+1);fmod((2-1)-1, 2+1);fmod((2-2)-1, 2+1) соответственно<br /></p><p></p>и sum&#91;1&#93; = 5 + 3 <br /><br />здесь уже деление на период, то есть среднее должно быть (5+3)/2 = 4<br />но судя по формуле вернется 0,т.к (8-8)/2<br /><br />либо я где то ошибся в логике. подскажите <br />
			<i>06.09.2019 17:56:34, Aleksei.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39592/topic4719/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39592/topic4719/</guid>
			<pubDate>Fri, 06 Sep 2019 17:56:34 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>описание функции Squeeze</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39588/topic4719/">описание функции Squeeze</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Пытаюсь разобраться в примере SMA, но не могу найти описания что делает функция Squeeze. Есть ли где ее описание?<br />Я понимаю, что это как то завязано на пропуск в расчете несуществующих свечей в ds. Что содержится в переменных Ip,Ipp,Ippp
====code====
<pre>--&#91;&#91;Simple Moving Average (SMA)
SMA = sum(Pi) / n&#93;&#93;
function F_SMA()
&nbsp;&nbsp;&nbsp;local sum = {}
&nbsp;&nbsp;&nbsp;local it = {p=0, l=0}
return function (I, P, VT, ds)
&nbsp;&nbsp;&nbsp;if I == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it = {p=0, l=0}
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;if CandleExist(I,ds) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if I~=it.p then it={p=I, l=it.l+1} end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&#91;Ip&#93; = (sum&#91;Ipp&#93; or 0) + GetValueEX(it.p,VT,ds)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l &#62;= P then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) / P
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
return nil
end
end
</pre>
============= <br />
			<i>06.09.2019 15:48:43, Aleksei.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39588/topic4719/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39588/topic4719/</guid>
			<pubDate>Fri, 06 Sep 2019 15:48:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
