<?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>Sat, 25 Apr 2026 21:37:08 +0300</pubDate>
		<item>
			<title>Использование части данных другого индикатора в коде</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message47445/topic5701/">Использование части данных другого индикатора в коде</a></b> <i>Работа с типовым шаблоном индикатора</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Извините, в коде выше опечатки.<br />Вот работающий:<br />
====code====
<pre>function CMO_trends()
&nbsp;&nbsp;local FCMO = CMO()
&nbsp;&nbsp;local dsCMO = {Val = {}, Min = {}, Max = {}}
&nbsp;&nbsp;
&nbsp;&nbsp;return function (I, Fsettings, ds)
&nbsp;&nbsp;&nbsp;&nbsp;local CMO_upTrend, CMO_downTrend
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;local mn = #dsCMO.Min
&nbsp;&nbsp;&nbsp;&nbsp;local mx = #dsCMO.Max
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;dsCMO.Val&#91;I&#93; = FCMO(I, Fsettings, ds)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- считаем CMO
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;if I &#62; Settings.CMO_Period and dsCMO.Val&#91;I&#93; ~= nil and dsCMO.Val&#91;I-1&#93; ~= nil and dsCMO.Val&#91;I-2&#93; ~= nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if dsCMO.Val&#91;I-1&#93; &#62; dsCMO.Val&#91;I&#93; and dsCMO.Val&#91;I-1&#93; &#62; dsCMO.Val&#91;I-2&#93; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dsCMO.Max&#91;mx+1&#93; = dsCMO.Val&#91;I-1&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- определяем очередной максимум CMO
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMO_downTrend =&nbsp;&nbsp;mx&#62;0 and dsCMO.Max&#91;mx+1&#93; &#60; dsCMO.Max&#91;mx&#93;&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;if dsCMO.Val&#91;I-1&#93; &#60; dsCMO.Val&#91;I&#93; and dsCMO.Val&#91;I-1&#93; &#60; dsCMO.Val&#91;I-2&#93; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dsCMO.Min&#91;mn+1&#93; = dsCMO.Val&#91;I-1&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- определяем очередной минимум CMO
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMO_upTrend =&nbsp;&nbsp;mn&#62;0 and dsCMO.Min&#91;mn+1&#93; &#62; dsCMO.Min&#91;mn&#93;&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;end 
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return CMO_upTrend and 10 or nil, CMO_downTrend and -10 or nil
&nbsp;&nbsp;end
end
</pre>
============= <br />
			<i>03.08.2020 03:37:31, Kaavan.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message47445/topic5701/</link>
			<guid>http://forum.quik.ru/messages/forum17/message47445/topic5701/</guid>
			<pubDate>Mon, 03 Aug 2020 03:37:31 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Использование части данных другого индикатора в коде</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message47444/topic5701/">Использование части данных другого индикатора в коде</a></b> <i>Работа с типовым шаблоном индикатора</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			====code====
<pre>function CMO_trends()
&nbsp;&nbsp;local FCMO = CMO()
&nbsp;&nbsp;local dsCMO = {Val = {}, Min = {}, Max = {}}
&nbsp;&nbsp;
&nbsp;&nbsp;return function (I, Fsettings, ds)
&nbsp;&nbsp;&nbsp;&nbsp;local CMO_upTrend, CMO_downTrend
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;local mn = #dsCMO.Min
&nbsp;&nbsp;&nbsp;&nbsp;local mx = #dsCMO.Max
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;dsCMO.Val&#91;I&#93; = FCMO(I, Fsettings, ds)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- считаем CMO
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;if I &#62; Settings.CMO_Period and dsCMO.Val&#91;I&#93; ~= nil and dsCMO.Val&#91;I-1&#93; ~= nil and dsCMO.Val&#91;I-2&#93; ~= nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if dsCMO.Val&#91;I-1&#93; &#62; dsCMO.Val&#91;I&#93; and dsCMO.Val&#91;I-1&#93; &#62; dsCMO.Val&#91;I-2&#93; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dsCMO.Max&#91;mx+1&#93; = dsCMO.Val&#91;I-1&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- определяем очередной максимум CMO
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMO_downTrend =&nbsp;&nbsp;mx&#62;0 and dsCMO.Max&#91;mx+1&#93; &#60; dsCMO.Max&#91;mx&#93;&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;if dsCMO.Val&#91;I-1&#93; &#60; dsCMO.Val&#91;I&#93; and dsCMO.Val&#91;I-1&#93; &#60; dsCMO.Val&#91;I-2&#93; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dsCMO.Min&#91;mn+1&#93; = dsCMO.Val&#91;I-1&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- определяем очередной минимум CMO
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMO_upTrend =&nbsp;&nbsp;mn&#62;0 and dsCMO.Max&#91;mn+1&#93; &#60; dsCMO.Max&#91;mn&#93;&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;end 
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return CMO_upTrend and 10 or nil, CMO_downTrend and -10 or nil
&nbsp;&nbsp;end
end
</pre>
=============
может этот фрагмент кому-то поможет <br />
			<i>03.08.2020 03:33:25, Kaavan.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message47444/topic5701/</link>
			<guid>http://forum.quik.ru/messages/forum17/message47444/topic5701/</guid>
			<pubDate>Mon, 03 Aug 2020 03:33:25 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Использование части данных другого индикатора в коде</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message47443/topic5701/">Использование части данных другого индикатора в коде</a></b> <i>Работа с типовым шаблоном индикатора</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Всё получилось красиво. Спасибо! <br />
			<i>03.08.2020 03:32:13, Kaavan.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message47443/topic5701/</link>
			<guid>http://forum.quik.ru/messages/forum17/message47443/topic5701/</guid>
			<pubDate>Mon, 03 Aug 2020 03:32:13 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Использование части данных другого индикатора в коде</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message47390/topic5701/">Использование части данных другого индикатора в коде</a></b> <i>Работа с типовым шаблоном индикатора</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_nWFya3PU" href="/user/14177/" bx-tooltip-user-id="14177">Kaavan</a> написал:<br />Т.е. в моем случае нужно будет циклом от 1 до I просчитать CMO, поместить результаты в массив и работать далее с ним как с источником данных? <br />=============<br />да<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_RMZlYSRh" href="/user/14177/" bx-tooltip-user-id="14177">Kaavan</a> написал:<br />Получается таблица sum накапливает данные с каждым вызовом?<br />=============<br />да <br />
			<i>31.07.2020 12:23:11, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message47390/topic5701/</link>
			<guid>http://forum.quik.ru/messages/forum17/message47390/topic5701/</guid>
			<pubDate>Fri, 31 Jul 2020 12:23:11 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Использование части данных другого индикатора в коде</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message47389/topic5701/">Использование части данных другого индикатора в коде</a></b> <i>Работа с типовым шаблоном индикатора</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			в этом смысле никак не могу осознать расчет SMA.<br />Получается таблица sum накапливает данные с каждым вызовом?<br />
====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>31.07.2020 12:18:36, Kaavan.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message47389/topic5701/</link>
			<guid>http://forum.quik.ru/messages/forum17/message47389/topic5701/</guid>
			<pubDate>Fri, 31 Jul 2020 12:18:36 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Использование части данных другого индикатора в коде</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message47385/topic5701/">Использование части данных другого индикатора в коде</a></b> <i>Работа с типовым шаблоном индикатора</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Читал, но не в полной мере осознал.<br />Спасибо за ответ.<br />Т.е. в моем случае нужно будет циклом от 1 до I просчитать CMO, поместить результаты в массив и работать далее с ним как с источником данных? &nbsp; <br />
			<i>31.07.2020 12:06:38, Kaavan.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message47385/topic5701/</link>
			<guid>http://forum.quik.ru/messages/forum17/message47385/topic5701/</guid>
			<pubDate>Fri, 31 Jul 2020 12:06:38 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Использование части данных другого индикатора в коде</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message47379/topic5701/">Использование части данных другого индикатора в коде</a></b> <i>Работа с типовым шаблоном индикатора</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_uR2HytFC" href="/user/14177/" bx-tooltip-user-id="14177">Kaavan</a> написал:<br />Я предположил, что для этого мне нужно создать массив, в который вызвать функцию СМО для значений индекса от I до I-20<br />=============<br />В readme_LuaIndicators.txt четко сказано:<br /><br />====quote====<br />Все функции требуют предварительного расчета начиная с индекса 1. <br />Т.е. даже если нужен только последний индекс, все равно требуется провести цикл расчета начиная с самого первого индекса.<br />=============<br /><br />настоятельно рекомендуем читать инструкции прежде чем что-то делать <br />
			<i>31.07.2020 11:27:40, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message47379/topic5701/</link>
			<guid>http://forum.quik.ru/messages/forum17/message47379/topic5701/</guid>
			<pubDate>Fri, 31 Jul 2020 11:27:40 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Использование части данных другого индикатора в коде</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message47372/topic5701/">Использование части данных другого индикатора в коде</a></b> <i>Работа с типовым шаблоном индикатора</i> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			====code====
<pre>function CMOExtremum()
&nbsp;&nbsp;local CMOlenght = 20
&nbsp;&nbsp;local FCMO = CMO()
&nbsp;&nbsp;
&nbsp;&nbsp;return function (I, Fsettings, ds)

&nbsp;&nbsp;&nbsp;&nbsp;local CMOValues = {}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;CMOValues&#91;1&#93; = FCMO(I, Fsettings, ds)
&nbsp;&nbsp;&nbsp;&nbsp;CMOValues&#91;2&#93; = FCMO(I+1, Fsettings, ds)
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return CMOValues&#91;2&#93;
&nbsp;&nbsp;end
end
</pre>
=============
<br />Добрый день!<br />Для расчета индикатора мне нужны пара десятков последних значений индикатора CMO, который я рассчитываю в этом же файле.<br /><br />Я предположил, что для этого мне нужно создать массив, в который вызвать функцию СМО для значений индекса от I до I-20<br />Но получается какая-то ерунда.<br />Т.е. если смотреть код выше: если возвращать CMOValues&#91;1&#93;, то выход индикатора совпадает с СМО<br />Ожидается, что возврат CMOValues&#91;2&#93; даст ту же картину, но смещенную на один бар назад.<br />Но нет. Получается совсем другая кривая.<br /><br />Предположу, что нужно задействовать Squeeze и GetValueEX, не предположу как. <br />Подскажите, пожалуйста, как решить задачу эффективно?<br /><br />Для понимания опишу постановку. При возникновении экстремума на CMO <br />
====code====
<pre>&nbsp;&nbsp;&nbsp;&nbsp;if CMOValues&#91;2&#93; &#62; CMOValues&#91;1&#93; and CMOValues&#91;2&#93; &#62; CMOValues&#91;3&#93; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxCMO1 = CMOValues&#91;2&#93;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;if CMOValues&#91;2&#93; &#60; CMOValues&#91;1&#93; and CMOValues&#91;2&#93; &#60; CMOValues&#91;3&#93; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minCMO1 = CMOValues&#91;2&#93;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;
</pre>
=============
найти ближайший того же типа (мин, макс) и сравнить их значения.<br />В зависимости от их соотношения выдать сигнал <br />
			<i>31.07.2020 10:09:01, Kaavan.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message47372/topic5701/</link>
			<guid>http://forum.quik.ru/messages/forum17/message47372/topic5701/</guid>
			<pubDate>Fri, 31 Jul 2020 10:09:01 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
	</channel>
</rss>
