<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Все индикаторы на Lua]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Все индикаторы на Lua форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Mon, 11 May 2026 16:33:54 +0300</pubDate>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81476/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Используемая в коде индикатора формула не отличается от общепринятой формулы OBV. Особенности расчетов, которые начинаются с 3-го бара, мы указывали ранее.<br /><br />Что касается Average Directional Movement Index (ADX), то такое округления считаем допустимым. <br />
			<i>17.02.2026 09:00:35, Oleg Kuzembaev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81476/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81476/topic1157/</guid>
			<pubDate>Tue, 17 Feb 2026 09:00:35 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81254/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_7GxguOqc" href="/user/16979/" bx-tooltip-user-id="16979">Oleg Kuzembaev</a> написал:<br />Расчет с третьего бара происходит т.к. это первый момент, когда у функции есть все нужные входные данные (две цены + объём) и уже существует базовое значение OBV, от которого можно «нарастить» индикатор. Именно поэтому первые два бара только готовят (инициализируют) переменные, а расчёт настоящего OBV начинается с третьего.<br />=============<br /> Формула индикатора:<br /><br />-- Если Close(i) &gt; Close(i-1), то OBV(i) = OBV(i-1) + Volume(i)-- Если Close(i) &lt; Close(i-1), то OBV(i) = OBV(i-1) - Volume(i)<br />-- Если Close(i) = Close(i-1), то OBV(i) = OBV(i-1)<br /><br /> Тут две цены нету.<br /><br />У вас расчёт такой:<br /><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;local P1 = GetValueEX(it.p,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;local P2 = GetValueEX(it.pp,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if P1 &gt; P2 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = tmp.pp + GetValueEX(it.p,VOLUME,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if P1 &lt; P2 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = tmp.pp - GetValueEX(it.p,VOLUME,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if P1 == P2 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = tmp.pp<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_jCCxPhjp" href="/user/16979/" bx-tooltip-user-id="16979">Oleg Kuzembaev</a> написал:<br />Нам не удалось найти упоминаний о четкой необходимости определения знаков после запятой больше или меньше 2 в материалах о техническом анализе.<br />=============<br />Похоже Average Directional Movement Index (ADX) - единственный индикатор в Quik&#39;е, где зачем-то делается округление. <br />
			<i>10.02.2026 14:41:10, Constantin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81254/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81254/topic1157/</guid>
			<pubDate>Tue, 10 Feb 2026 14:41:10 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81218/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Здравствуйте, <a class="blog-p-user-name" id="bp_W0cOENEz" href="/user/107/" bx-tooltip-user-id="107">Constantin</a>, <br />====quote====<br />On Balance Volume (OBV) - В Quik&#39;е расчет идет с 3 бара, а не со 2-го.<br />=============<br />Расчет с третьего бара происходит т.к. это первый момент, когда у функции есть все нужные входные данные (две цены + объём) и уже существует базовое значение OBV, от которого можно «нарастить» индикатор. Именно поэтому первые два бара только готовят (инициализируют) переменные, а расчёт настоящего OBV начинается с третьего.<br />====quote====<br />Average Directional Movement Index (ADX) - В Quik&#39;е делается округление до 2-х знаков.<br />=============<br />Нам не удалось найти упоминаний о четкой необходимости определения знаков после запятой больше или меньше 2 в материалах о техническом анализе.<br />====quote====<br />Accumulation/Distribution (AD) (Done) (Не совпадает по формуле с Quik&#39;ом?)<br />=============<br />Различий в вычисляемой части обнаружить не удалось. Код реализует AD точно так же, как это описано в любой книге по техническому анализу.<br />====quote====<br />Stochastic Oscillator (Stoch) (Done. Не совпадает по формуле?, но совпадает по динамике)<br />=============<br />Уточните, пожалуйста, какая именно часть формулы вас смутила? <br />
			<i>09.02.2026 09:19:12, Oleg Kuzembaev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81218/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81218/topic1157/</guid>
			<pubDate>Mon, 09 Feb 2026 09:19:12 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81192/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_dGJ0qH8e" href="/user/107/" bx-tooltip-user-id="107">Constantin</a> написал:<br />On Balance Volume (OBV) - В &nbsp;Quik&#39;е расчет идет с 3 бара, а не со 2-го.<br /><br />Average Directional Movement Index (ADX) - В Quik&#39;е делается округление до 2-х знаков.<br />=============<br /><br />Accumulation/Distribution (AD) (Done) (Не совпадает по формуле с Quik&#39;ом?)<br /><br />Elders Force Index (EFI) (Done. Не совпадает по формуле с Quik&#39;ом, но совпадает по динамике)<br /><br />Stochastic Oscillator (Stoch) (Done. Не совпадает по формуле?, но совпадает по динамике) <br />
			<i>07.02.2026 11:21:51, Constantin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81192/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81192/topic1157/</guid>
			<pubDate>Sat, 07 Feb 2026 11:21:51 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81190/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			On Balance Volume (OBV) - В &nbsp;Quik&#39;е расчет идет с 3 бара, а не со 2-го.<br /><br />Average Directional Movement Index (ADX) - В Quik&#39;е делается округление до 2-х знаков. <br />
			<i>07.02.2026 10:09:46, Constantin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81190/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81190/topic1157/</guid>
			<pubDate>Sat, 07 Feb 2026 10:09:46 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81169/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<a class="blog-p-user-name" id="bp_nvsKiE1Z" href="/user/16871/" bx-tooltip-user-id="16871">Иван Леонтьев</a>, добрый день.<br /><br />Действительно, текущая формула расчета индикатора EFI отличается от общепризнанной. Мы постараемся исправить данную ошибку в очередных версиях ПО. <br />Приносим извинения за причиненные неудобства. <br />
			<i>06.02.2026 12:35:31, Oleg Kuzembaev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81169/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81169/topic1157/</guid>
			<pubDate>Fri, 06 Feb 2026 12:35:31 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81154/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Если правильно понимаю,<br />то Встроенный индикатор Force Index &nbsp;это фактически нормированный (относительно предыдущей close)классический индикатор &nbsp;Force Index .<br />Так как этот индикатор отображается в отдельном окне, то для торговли используются не абсолютные значения , а относительное его изменение либо движения вокруг нулевой линии.<br />---------------<br />Стратегии<br />Некоторые стратегии торговли с использованием Force Index:<br /><ul><li>Стратегия на пересечении нулевой линии. Если Force Index пересекает нулевую линию снизу вверх, это может быть сигналом к покупке, так как рынок переходит от медвежьего к бычьему тренду. Если Force Index пересекает нулевую линию сверху вниз, это может быть сигналом к продаже, так как рынок переходит от бычьего к медвежьему тренду.<br /><li>Стратегия на дивергенциях. Например, если цена делает новый минимум, но Force Index показывает более высокий минимум, это может быть сигналом к покупке, так как рынок может готовиться к развороту вверх.<br /></ul>Force Index часто используется в сочетании с другими техническими индикаторами для повышения точности торговых сигналов. Например, с скользящими средними (MA) — пересечение Force Index с MA может служить сигналом для входа в сделку, с индексом относительной силы (RSI) — совместное использование с RSI позволяет более точно определить перекупленность или перепроданность рынка.<br /><br /><B>В итоге &nbsp;, для принятия решения, нет никакой разницы как он рассчитан.</B> <br />
			<i>05.02.2026 14:01:58, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81154/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81154/topic1157/</guid>
			<pubDate>Thu, 05 Feb 2026 14:01:58 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81153/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<a class="blog-p-user-name" id="bp_51RdOITf" href="/user/16871/" bx-tooltip-user-id="16871">Иван Леонтьев</a>, ваше обращение получено, проблема изучается. Постараемся в ближайшее &nbsp; &nbsp; время дать ответ. <br />
			<i>05.02.2026 12:37:13, Oleg Kuzembaev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81153/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81153/topic1157/</guid>
			<pubDate>Thu, 05 Feb 2026 12:37:13 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81130/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_dT0QPGuC" href="/user/16979/" bx-tooltip-user-id="16979">Oleg Kuzembaev</a> написал:<br />Индикаторы представленные в терминале QUIK и их расчеты - это лишь примеры того, как они могут выглядеть.<br />=============<br />Круто, то есть пользоваться встроенными индикаторами вы не рекомендуете, поскольку не отвечаете за достоверность их показаний? Это ничего что ваш продукт распространяется не бесплатно и я вправе рассчитывать на достоверность его данных, поскольку речь идет о потерянных мною деньгах в результате неправильных расчетов?<br />====quote====<br /><a class="blog-p-user-name" id="bp_NfrqTPWU" href="/user/16979/" bx-tooltip-user-id="16979">Oleg Kuzembaev</a> написал:<br />Если у пользователей есть желание изменить логику построения таких индикаторов, то они могут воспользоваться архивом с примерами таких индикаторов по ссылке<br />=============<br />Да, спасибо, именно этими индикаторами я и воспользовался для проверки достоверности расчета. И спешу сообщить о предположительной неточности вашего расчета индикатора. Конечно у меня есть желание изменить логику и я буду вынужден пользоваться собственным индикатором с верным расчетом данных. <br />
			<i>03.02.2026 16:57:51, Иван Леонтьев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81130/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81130/topic1157/</guid>
			<pubDate>Tue, 03 Feb 2026 16:57:51 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81128/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Добрый день.<br /><br />Индикаторы представленные в терминале QUIK и их расчеты - это лишь примеры того, как они могут выглядеть.<br />Если у пользователей есть желание изменить логику построения таких индикаторов, то они могут воспользоваться архивом с примерами таких индикаторов по ссылке (<noindex><a href="https://arqatech.com/upload/iblock/398/INDICATORS.zip" target="_blank" rel="nofollow">https://arqatech.com/upload/iblock/398/INDICATORS.zip</a></noindex>), а также подробной инструкцией об их редактировании (<noindex><a href="https://arqatech.com/upload/iblock/398/INDICATORS.zip" target="_blank" rel="nofollow">https://arqatech.com/upload/iblock/398/INDICATORS.zip</a></noindex>) &quot;<U>Использование LUA в Рабочем месте QUIK</U>&quot;. <br />
			<i>03.02.2026 12:36:53, Oleg Kuzembaev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81128/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81128/topic1157/</guid>
			<pubDate>Tue, 03 Feb 2026 12:36:53 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81124/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Привет, пожалуйста проверьте расчет индикатора Elder Force Index. Его показания не совпадают ни с одним из вариантов индикаторов Elder Force Index на Трейдинг Вью. Я сделал собственный расчет индикатора и его отображение &nbsp;тоже не совпадает с вашим индикатором, но зато совпадает с показаниями индикаторов на Трейдинг Вью. Тогда я предоставил ваш вариант расчета нейросети и попросил сравнить его с моим расчетом, в результате нейросеть сообщила следующее<br /><br /><p>В вашем коде ошибка в расчете Force Index:</p>local FI = (1 - GetValueEX(it.pp,VT,ds) / GetValueEX(it.p,VT,ds)) * GetValueEX(it.p,VOLUME,ds)<br /><br /><p>Это соответствует:</p>FI = (1 - Previous_Close/Current_Close) * Volume<br /><br /><p>Но по стандарту Elder&#39;s Force Index должно быть:</p>FI = (Current_Close - Previous_Close) * Volume<br /><br /><br /><p>Ваша формула дает относительное изменение, а не абсолютную разницу!</p> <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=13093&" width="1021" height="697" /><br /><i>02.02.2026 19:39:28, Иван Леонтьев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81124/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81124/topic1157/</guid>
			<pubDate>Mon, 02 Feb 2026 19:39:28 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message76511/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<a class="blog-p-user-name" id="bp_0gr4jGWt" href="/user/6203/" bx-tooltip-user-id="6203"><noindex><a href="mailto:glotov_pa@mail.ru" target="_blank" rel="nofollow">glotov_pa@mail.ru</a></noindex></a>, Вы привели пример из MetaTrader &quot;The indicator corresponds to the ADX indicator in MetaTrader&quot;. Это не одно и тоже. Вам нужен вариант для квик, можно найти на этом сайте. Вот вариант от разработчиков, должен выводить все линии
====code====
<pre>------------------------------------------------------------------
----Moving Average SMA, MMA, EMA, WMA, SMMA, VMA
------------------------------------------------------------------

local SMA,MMA,EMA,WMA,SMMA,VMA = "SMA","MMA","EMA","WMA","SMMA","VMA"
local OPEN,HIGH,LOW,CLOSE,VOLUME,MEDIAN,TYPICAL,WEIGHTED,DIFFERENCE,ANY = "O","H","L","C","V","M","T","W","D","A"

--&#91;&#91;Simple Moving Average (SMA)
SMA = sum(Pi) / n&#93;&#93;
local 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
--&#91;&#91;Modified Moving Average (MMA)
MMA = (MMAi-1*(n-1) + Pi) / n&#93;&#93;
local function F_MMA() 
&nbsp;&nbsp;&nbsp;local sum = {}
&nbsp;&nbsp;&nbsp;local tmp = {pp=nil, p=nil}
&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;tmp = {pp=nil, p=nil}
&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 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it = {p=I, l=it.l+1} 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.pp = tmp.p
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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;if it.l &#60;= P + 1 then
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;if (it.l == P) or (it.l == P + 1) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p = (sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) / P
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p = (tmp.pp*(P-1) + GetValueEX(it.p,VT,ds)) / P
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l &#62;= P then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return tmp.p
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
return nil
end
end
--&#91;&#91;Exponential Moving Average (EMA)
EMAi = (EMAi-1*(n-1)+2*Pi) / (n+1)&#93;&#93;
local function F_EMA() 
&nbsp;&nbsp;&nbsp;local tmp = {pp=nil, p=nil}
&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;tmp = {pp=nil, p=nil}
&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 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it = {p=I, l=it.l+1} 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.pp = tmp.p
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p = GetValueEX(it.p,VT,ds)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p = (tmp.pp*(P-1) + 2*GetValueEX(it.p,VT,ds)) / (P+1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l &#62;= P then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return tmp.p
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
return nil
end
end
--&#91;&#91;William Moving Average (WMA)
( Previous WILLMA * ( Period - 1 ) + Data ) / Period&#93;&#93;
local function F_WMA()
&nbsp;&nbsp;&nbsp;local tmp = {pp=nil, p=nil}
&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;tmp = {pp=nil, p=nil}
&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 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it={p=I, l=it.l+1}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.pp = tmp.p
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p = GetValueEX(it.p,VT,ds)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p = (tmp.pp * (P-1) + GetValueEX(it.p,VT,ds)) / P
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l &#62;= P then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return tmp.p
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
return nil
end
end
--&#91;&#91;Volume Adjusted Moving Average (VMA)
VMA = sum(Pi*Vi) / sum(Vi)&#93;&#93;
local function F_VMA()
&nbsp;&nbsp;&nbsp;local sum = {}
&nbsp;&nbsp;&nbsp;local sum2 = {}
&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;sum2 = {}
&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) * GetValueEX(it.p,VOLUME,ds)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum2&#91;Ip&#93; = (sum2&#91;Ipp&#93; or 0) + GetValueEX(it.p,VOLUME,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)) / (sum2&#91;Ip&#93; - (sum2&#91;Ippp&#93; or 0))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
return nil
end
end
--&#91;&#91;Smoothed Moving Average (SMMA)
SMMAi = (sum(Pi) - SMMAi-1 + Pi) / n&#93;&#93;
local function F_SMMA()
&nbsp;&nbsp;&nbsp;local sum = {}
&nbsp;&nbsp;&nbsp;local sum2 = {}
&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;sum2 = {}
&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;if it.l == P then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum2&#91;Ip&#93; = (sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) / P
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum2&#91;Ip&#93; = ((sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) - (sum2&#91;Ipp&#93; or 0)+ GetValueEX(it.p,VT,ds)) / P
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return sum2&#91;Ip&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
return nil
end
end

local function CandleExist(I,ds)
return (type(C)=="function" and C(I)~=nil) or
&nbsp;&nbsp;&nbsp;(type(ds)=="table" and (ds&#91;I&#93;~=nil or (type(ds.Size)=="function" and (I&#62;0) and (I&#60;=ds:Size()))))
end
local function Squeeze(I,P)
&nbsp;&nbsp;&nbsp;return math.fmod(I-1,P+1)
end
local function ConvertValue(T,...)
local function r(V, R) 
&nbsp;&nbsp;&nbsp;if R and string.upper(R)== "ON" then R=0 end
&nbsp;&nbsp;&nbsp;if V and tonumber(R) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if V &#62;= 0 then return math.floor(V * 10^R + 0.5) / 10^R
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else return math.ceil(V * 10^R - 0.5) / 10^R end
&nbsp;&nbsp;&nbsp;else return V end
end
local arg = {...}
arg.n = select('#', ...)
&nbsp;&nbsp;&nbsp;if arg.n &#62; 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, arg.n do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg&#91;i&#93;=arg&#91;i&#93; and r(arg&#91;i&#93; * ((T and T.Multiply) or 1), (T and T.Round) or "off")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return unpack(arg)
&nbsp;&nbsp;&nbsp;else return nil end
end
local function GetValueEX(I,VT,ds) 
VT=(VT and string.upper(string.sub(VT,1,1))) or ANY
&nbsp;&nbsp;&nbsp;if VT == OPEN then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Open
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (O and O(I)) or (ds and ds:O(I))
&nbsp;&nbsp;&nbsp;elseif VT == HIGH then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--High
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (H and H(I)) or (ds and ds:H(I))
&nbsp;&nbsp;&nbsp;elseif VT == LOW then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Low
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (L and L(I)) or (ds and ds:L(I))
&nbsp;&nbsp;&nbsp;elseif VT == CLOSE then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Close
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (C and C(I)) or (ds and ds:C(I))
&nbsp;&nbsp;&nbsp;elseif VT == VOLUME then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Volume
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (V and V(I)) or (ds and ds:V(I)) 
&nbsp;&nbsp;&nbsp;elseif VT == MEDIAN then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Median
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ((GetValueEX(I,HIGH,ds) + GetValueEX(I,LOW,ds)) / 2)
&nbsp;&nbsp;&nbsp;elseif VT == TYPICAL then&nbsp;&nbsp;&nbsp;--Typical
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3)
&nbsp;&nbsp;&nbsp;elseif VT == WEIGHTED then&nbsp;&nbsp;&nbsp;--Weighted
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4) 
&nbsp;&nbsp;&nbsp;elseif VT == DIFFERENCE then&nbsp;&nbsp;&nbsp;--Difference
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds))
&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Any
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (ds and ds&#91;I&#93;)
&nbsp;&nbsp;&nbsp;end
return nil
end
local function MA() --Moving Average ("MA")
&nbsp;&nbsp;&nbsp;local T_MA = {&#91;SMA&#93;=F_SMA(),&#91;MMA&#93;=F_MMA(),&#91;EMA&#93;=F_EMA(),&#91;VMA&#93;=F_VMA(),&#91;SMMA&#93;=F_SMMA(),&#91;WMA&#93;=F_WMA()}
return function (I, Fsettings, ds)
&nbsp;&nbsp;&nbsp;local Fsettings=(Fsettings or {})
&nbsp;&nbsp;&nbsp;local P = (Fsettings.Period or 14)
&nbsp;&nbsp;&nbsp;if (P &#62; 0) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return T_MA&#91;string.upper(Fsettings.Metod or EMA)&#93;(I, P, (Fsettings.VType or CLOSE), ds)
&nbsp;&nbsp;&nbsp;end
return nil
end
end

local function TR() --True Range ("TR")
&nbsp;&nbsp;&nbsp;local it = {pp=0, p=0, l=0}
return function (I, ds)
&nbsp;&nbsp;&nbsp;if I == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it = {pp=0, 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={pp=it.p, p=I, l=it.l+1} end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return math.abs(GetValueEX(it.p,DIFFERENCE, ds))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return math.max(math.abs(GetValueEX(it.p,DIFFERENCE, ds)), 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;math.abs(GetValueEX(it.p,HIGH,ds) - GetValueEX(it.pp,CLOSE,ds)), 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;math.abs(GetValueEX(it.pp,CLOSE,ds)-GetValueEX(it.p,LOW,ds)))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
return nil
end
end
function ADX() --Average Directional Movement Index ("ADX")
&nbsp;&nbsp;&nbsp;local pDI_MA=MA()
&nbsp;&nbsp;&nbsp;local mDI_MA=MA()
&nbsp;&nbsp;&nbsp;local ADX_MA=MA()
&nbsp;&nbsp;&nbsp;local f_TR=TR()
&nbsp;&nbsp;&nbsp;local it = {pp=0, p=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local P = (Fsettings.Period or 14)
local M = (Fsettings.Metod or EMA)
if (P&#62;0) then
&nbsp;&nbsp;&nbsp;if I == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (M==VMA) then M=SMA end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it = {pp=0, p=0, l=0}
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;local i_TR = f_TR(I,ds)
&nbsp;&nbsp;&nbsp;if CandleExist(I,ds) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if I~=it.p then it={pp=it.p, p=I, l=it.l+1} end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l &#62; 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if GetValueEX(it.p,HIGH,ds) &#62; GetValueEX(it.pp,HIGH,ds) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDM = math.abs(GetValueEX(it.p,HIGH,ds)-GetValueEX(it.pp,HIGH,ds))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else pDM = 0 end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if GetValueEX(it.p,LOW,ds) &#60; GetValueEX(it.pp,LOW,ds) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDM = math.abs(GetValueEX(it.pp,LOW,ds)-GetValueEX(it.p,LOW,ds))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else mDM = 0 end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if pDM &#62; mDM then mDM=0 end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if mDM &#62; pDM then pDM=0 end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if pDM == mDM then pDM=0 mDM = 0 end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if i_TR~=0 then pSDI = pDM / i_TR * 100 else pSDI = 0 end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if i_TR~=0 then mSDI = mDM / i_TR * 100 else mSDI = 0 end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local pDI = pDI_MA(it.l-1, {Period=P, Metod=M, VType=ANY}, {&#91;it.l-1&#93; = pSDI})
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local mDI = mDI_MA(it.l-1, {Period=P, Metod=M, VType=ANY}, {&#91;it.l-1&#93; = mSDI})
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l&#62;P and pDI and mDI then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ADX_MA(it.l-P, {Period=P, Metod=M, VType=ANY}, {&#91;it.l-P&#93;=math.abs(pDI-mDI)/(pDI+mDI)*100}),pDI,mDI
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil,pDI,mDI
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
end
return nil,nil,nil
end
end

Settings = {
Name = "*ADX (Average Directional Movement Index)", 
Period = 14, 
Metod = "EMA", --(SMA, MMA, EMA, WMA, SMMA, VMA)
line = {{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "Horizontal line",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE, 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(140, 140, 140)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "ADX", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE, 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(0, 162, 232)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "ADX +DI",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE, 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(0, 206, 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "ADX -DI",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(221, 44, 44)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
Round = "off",
Multiply = 1,
Horizontal_line="off"
}
&nbsp;&nbsp;&nbsp;local func&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
function Init() 
&nbsp;&nbsp;&nbsp;func = ADX()
&nbsp;&nbsp;&nbsp;return #Settings.line
end
function OnCalculate(Index) 
&nbsp;&nbsp;&nbsp;return tonumber(Settings.Horizontal_line),ConvertValue(Settings,func(Index, Settings))
end

</pre>
============= <br />
			<i>26.08.2024 12:11:50, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message76511/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message76511/topic1157/</guid>
			<pubDate>Mon, 26 Aug 2024 12:11:50 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message76507/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_RnAhrc0b" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br /> <br />====quote====<br /> &nbsp; &nbsp;<noindex><a href="mailto:glotov_pa@mail.ru" target="_blank" rel="nofollow">glotov_pa@mail.ru</a></noindex> написал:<br />Подскажите как с помощью индикатора ADX получить данные DI+ и DI-. Нужен пример.<br />=============<br /> Никак.<br />----------<br />Это ADX вычисляется через D+ и D-, а не наоборот.<br />--------------------<br />Можно &nbsp;вычислить индикаторы D+ &nbsp;и D-:<br />D+ &nbsp;это &nbsp;EMA от High(i)-High(i-1) <br />D- &#39;это &nbsp;EMA от Low(i)-Low(i-1) &nbsp;<br />-----------------<br />см. в интернете<br />=============<br />DI+ и DI- явно вычисляются в <noindex><a href="https://github.com/gridgentoo/LuaIndicators/blob/master/standard/ADX.lua" target="_blank" rel="nofollow">https://github.com/gridgentoo/LuaIndicators/blob/master/standard/ADX.lua</a></noindex><br />Осталось понять как получить. Интернет не даёт результатов при поиске))<br /><br />Может у кого есть решение? <br />
			<i>25.08.2024 09:54:24, glotov_pa@mail.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message76507/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message76507/topic1157/</guid>
			<pubDate>Sun, 25 Aug 2024 09:54:24 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message76077/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<a class="blog-p-user-name" id="bp_QwbSYLER" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, то, что нужно. Я так не смог придумать как максимум обнулять, теперь Вашими стараниями принцип я понял. Благодарю ещё раз. <br />
			<i>10.07.2024 18:35:50, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message76077/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message76077/topic1157/</guid>
			<pubDate>Wed, 10 Jul 2024 18:35:50 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message76076/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_Oyr3Pwel" href="/user/12532/" bx-tooltip-user-id="12532">Сергей</a> написал:<br />Благодарю, я так и предположил, что двойной расчёт идет. <br />Написал &quot;костыль&quot;, теперь показывает верно, правда только с первого просмотра, <br />после обновления свечи опять слетает, но мне достаточно для анализа. &nbsp;<br />-------------------------------<br />Создателям QUIK &nbsp;&#39;респект&#39;<br />=============<br />проблема решается путем установки в начальное значение всех переменных при индексе=1<br />например,так ваш скрипт:
====code====
<pre>name="*Vet_Rollback"
Settings={Name =name};

function OnCalculate(i)
&nbsp;&nbsp;local Hi,Li=H(i),L(i)
&nbsp;&nbsp;if i==1 then
&nbsp;&nbsp;&nbsp;maxh=0
&nbsp;&nbsp;else
&nbsp;&nbsp;if Hi then
&nbsp;&nbsp;&nbsp;&nbsp;if maxh&#60;Hi then maxh = Hi end
&nbsp;&nbsp;&nbsp;&nbsp;rollback=(Li-maxh)/maxh * 100
&nbsp;&nbsp;&nbsp;&nbsp;message(tostring(maxh..";"..Hi..";"..Li..";"..rollback))
&nbsp;&nbsp;end
&nbsp;&nbsp;end
return rollback
end


function Init()
Settings.line ={ { Color = RGB(153, 204, 0),Type = TYPE_HISTOGRAM,Width = 0}}
return #Settings.line
end

</pre>
============= <br />
			<i>10.07.2024 17:13:20, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message76076/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message76076/topic1157/</guid>
			<pubDate>Wed, 10 Jul 2024 17:13:20 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message76075/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Благодарю, я так и предположил, что двойной расчёт идет. <br />Написал &quot;костыль&quot;, теперь показывает верно, правда только с первого просмотра, <br />после обновления свечи опять слетает, но мне достаточно для анализа. &nbsp;<br />-------------------------------<br />Создателям QUIK &nbsp;&#39;респект&#39; <br />
			<i>10.07.2024 15:52:37, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message76075/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message76075/topic1157/</guid>
			<pubDate>Wed, 10 Jul 2024 15:52:37 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message76068/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_rj7Infh2" href="/user/12532/" bx-tooltip-user-id="12532">Сергей</a> написал:<br />что бы понятнее было, на графике просадка составила -31%, а на индикаторе -36, как от самого последнего хая.<br /> &nbsp; <br />=============<br />У Вас так и считает скрипт. <br />Т е просадка вычисляется от самого большого High. <br />-------------------<br />Есть такая особенность в расчетах индикаторов:<br />--------------------<br />Индикатор &nbsp;при запуске вычисляется два раза.<br />В первый раз в нем запомнится самый большой максимум на графике<br />Во второй раз вы и получите просадку всех значений относительного этого максимума.<br />--------------<br />Такой способ вычисления индикаторов это такой прикол создателей QUIK. <br />Чтобы жизнь медом не казалась.<br />-------------<br />Про это писал лет ...надцать назад. <br />Потом еще многие и много. <br />----------------<br />Пишите скрипт с учетом этого факта. &nbsp; <br />
			<i>10.07.2024 07:15:58, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message76068/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message76068/topic1157/</guid>
			<pubDate>Wed, 10 Jul 2024 07:15:58 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message76063/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			что бы понятнее было, на графике просадка составила -31%, а на индикаторе -36, как от самого последнего хая.<br />[FILE ID=12128] <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=12128&" width="1182" height="592" /><br /><i>09.07.2024 11:57:44, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message76063/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message76063/topic1157/</guid>
			<pubDate>Tue, 09 Jul 2024 11:57:44 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message76062/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Да, данные правильно приходят, потому как хай у вас в начале графика,<br /><br />[FILE ID=12127]<br /><br />но если взять например такой график, то видно, что расчет значения в месендже правильный, а на графический вывод подаёт значение высчитанное с самого большого хая, т.е (желтые стрелки) реальное значение должно быть -0,67, а на графике оно -17. &nbsp; <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=12127&" width="1187" height="901" /><br /><i>09.07.2024 11:50:21, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message76062/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message76062/topic1157/</guid>
			<pubDate>Tue, 09 Jul 2024 11:50:21 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message76060/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_TxSE81xV" href="/user/12532/" bx-tooltip-user-id="12532">Сергей</a> написал:<br />Settings = { &nbsp; 	Name = &quot;*Vet_Rollback&quot;,	line = { &nbsp; &nbsp;			{ Color = RGB(153, 204, 0),				Type = TYPE_HISTOGRAM,				Width = 0			},	}}function Init()	maxh = 0	return #Settings.lineendfunction OnCalculate(idx)	if idx &gt; 1 and H(idx)~= nil then			if maxh &lt; H(idx)		then			maxh = H(idx)			rollback = (L(idx) - maxh) / maxh * 100 		else			rollback = (L(idx) - maxh) / maxh * 100				end		message(tostring(maxh)..&quot; &nbsp; &nbsp; &quot;..H(idx)..&quot; &nbsp; &nbsp; &quot;..L(idx))		message(tostring(rollback))		return rollback	end	end<br />=============<br />При выводе на график выходят &nbsp;<B>те данные, что приходят в месседж. Верно?<br /></B><B><br /></B>[FILE ID=12123]<B><br /></B> <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=12123&" width="1116" height="592" /><br /><i>09.07.2024 09:32:35, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message76060/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message76060/topic1157/</guid>
			<pubDate>Tue, 09 Jul 2024 09:32:35 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message76053/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_XsTm7qI8" href="/user/12532/" bx-tooltip-user-id="12532">Сергей</a> написал:<br />Добрый день, написал маленький индикатор, который показывает просадку. &nbsp;<br />=============<br />продолжение... написал маленький индикатор, который показывает просадку от максимума.<br />Проблема в том, что при выводе на график выходят не те данные, что приходят в месседж. Почему-то последний максимум применяется &nbsp;для всех свечей, а нужно что-бы максимум применялся только для тех свечей, которые идут после вычисления очередного максимума. &nbsp;<br /><br />Settings = { &nbsp; <br />	Name = &quot;*Vet_Rollback&quot;,<br />	line = { &nbsp; &nbsp;<br />			{ <br />Color = RGB(153, 204, 0),<br />				Type = TYPE_HISTOGRAM,<br />				Width = 0<br />			},<br /><br />	}<br />}<br /><br /><br />function Init()<br />	maxh = 0<br />	return #Settings.line<br />end<br /><br />function OnCalculate(idx)<br />	if idx &gt; 1 and H(idx)~= nil then	<br />		if maxh &lt; H(idx)<br />		then<br />			maxh = H(idx)<br />			rollback = (L(idx) - maxh) / maxh * 100 <br />		else<br />			rollback = (L(idx) - maxh) / maxh * 100<br />		<br />		end<br />		message(tostring(maxh)..&quot; &nbsp; &nbsp; &quot;..H(idx)..&quot; &nbsp; &nbsp; &quot;..L(idx))<br />		message(tostring(rollback))<br />		return rollback<br />	end<br />	<br />end <br />
			<i>08.07.2024 22:07:45, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message76053/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message76053/topic1157/</guid>
			<pubDate>Mon, 08 Jul 2024 22:07:45 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message76051/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Добрый день, написал маленький индикатор, который показывает просадку. &nbsp; <br />
			<i>08.07.2024 21:54:24, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message76051/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message76051/topic1157/</guid>
			<pubDate>Mon, 08 Jul 2024 21:54:24 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message75936/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_8aFFXZt3" href="/user/6203/" bx-tooltip-user-id="6203"><noindex><a href="mailto:glotov_pa@mail.ru" target="_blank" rel="nofollow">glotov_pa@mail.ru</a></noindex></a> написал:<br />Подскажите как с помощью индикатора ADX получить данные DI+ и DI-. Нужен пример.<br />=============<br />Никак.<br />----------<br />Это ADX вычисляется через D+ и D-, а не наоборот.<br />--------------------<br />Можно &nbsp;вычислить индикаторы D+ &nbsp;и D-:<br />D+ &nbsp;это &nbsp;EMA от High(i)-High(i-1) <br />D- &#39;это &nbsp;EMA от Low(i)-Low(i-1) &nbsp;<br />-----------------<br />см. в интернете. <br />
			<i>25.06.2024 20:07:14, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message75936/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message75936/topic1157/</guid>
			<pubDate>Tue, 25 Jun 2024 20:07:14 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message75935/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Подскажите как с помощью индикатора ADX получить данные DI+ и DI-. Нужен пример. <br />
			<i>25.06.2024 19:16:32, glotov_pa@mail.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message75935/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message75935/topic1157/</guid>
			<pubDate>Tue, 25 Jun 2024 19:16:32 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message72162/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<a class="blog-p-user-name" id="bp_kE7dtast" href="/user/107/" bx-tooltip-user-id="107">Constantin</a>, &nbsp;добрый день.<br /><br />Формула SMMA:<br /><B>SMMA</B>i = (sum(<B>P</B>i) - <B>SMMA</B>i-1 + <B>P</B>i) / <B>n</B>,<br />где <B>P</B>i - значение цены в i-ом периоде,<br /><B>SMMA</B>i-1 - значение SMMA в предыдущем периоде,<br /><B>n</B> - установленное в параметрах индикатора количество периодов.<br /><br />Если необходимо рассмотреть что-то более подробно, просим Вас уточнить вопрос. <br />
			<i>03.10.2023 09:20:58, Anton Belonogov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message72162/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message72162/topic1157/</guid>
			<pubDate>Tue, 03 Oct 2023 09:20:58 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message72144/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			У вас какая-то странная формула у скользящей средней SMMA. Не могли бы вы её расшифровать, а то я запутался в её смысле. <br />
			<i>01.10.2023 19:33:12, Constantin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message72144/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message72144/topic1157/</guid>
			<pubDate>Sun, 01 Oct 2023 19:33:12 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message71879/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<a class="blog-p-user-name" id="bp_iRlrjCSl" href="/user/11550/" bx-tooltip-user-id="11550">Артем</a>, &nbsp;добрый день.<br /><br />Наши примеры Lua-индикаторов, доступные сейчас на сайте, действительно работают только с Lua версии 5.3.<br /><br />Мы зарегистрировали Ваше пожелание на добавление индикаторов, совместимых с Lua 5.4. Мы постараемся рассмотреть его и сообщить Вам результаты анализа.<br />Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО. <br />
			<i>08.09.2023 08:23:46, Anton Belonogov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message71879/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message71879/topic1157/</guid>
			<pubDate>Fri, 08 Sep 2023 08:23:46 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message71863/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /><br />====quote====<br />См<noindex><a href="https://forum.quik.ru/messages/forum17/message71039/topic1157/#message71039" target="_blank" rel="nofollow">написал:</a></noindex><br />====quote====<br /><noindex><a href="https://forum.quik.ru/messages/forum17/message71039/topic1157/#message71039" target="_blank" rel="nofollow">написал:<br />Добрый день!<br />Подскажите где взять indicators.zip под lua 5.4. У меня часть индикаторов на 5.4. и вместе на одном графике они не уживаются с 5.3.</a></noindex><br />=============<br /><noindex><a href="https://forum.quik.ru/messages/forum17/message71039/topic1157/#message71039" target="_blank" rel="nofollow">indicators.zip &nbsp;Это какой-то архив?<br />Вы где его взяли? <br />Вы думаете, что все должны знать, что у Вас в этом архиве?</a></noindex><br />=============<br />Смотрите пост 80.Там есть ссылка, но там только lua 5.3, который не работает вместе с 5.4. Один индикатор psar я починил заменой &nbsp;unpack(arg) на &nbsp;table.unpack(arg), но не все можно так просто починить, нужно к автору этих индикаторов обращаться. И было бы здорово переделать их под 5.4, а не чтобы каждый сам их прилаживал под себя. Хотя и так тоже наверное можно. Вот переделанный мной Psar под lua 5.4<br />
====code====
<pre>Settings = {
Name = "*PSAR (Parabolic SAR)", 
Step = 0.02,
MaxStep = 0.2, 
line = {{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "Horizontal line",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE, 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(140, 140, 140)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 3,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "PSAR_Up", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_POINT, 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(221, 44, 44)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 3,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "PSAR_Down", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_POINT, 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(0, 206, 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
Round = "off",
Multiply = 1,
Horizontal_line="off"
}

function Init()
&nbsp;&nbsp;&nbsp;func = PSAR()
&nbsp;&nbsp;&nbsp;return #Settings.line
end

function OnCalculate(Index) 
local Out = ConvertValue(Settings, func(Index, Settings))
local HL = tonumber(Settings.Horizontal_line)
&nbsp;&nbsp;&nbsp;if Out then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if Out &#62; ((H(Index)-L(Index))/2)+L(Index) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return HL,Out,nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return HL,nil,Out
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return HL,nil,nil
&nbsp;&nbsp;&nbsp;end
end

function PSAR() --Parabolic SAR ("PSAR")
&nbsp;&nbsp;&nbsp;local tmp = {pp=nil, p=nil}
&nbsp;&nbsp;&nbsp;local it = {ppp=0, pp=0, p=0, l=0}
return function (I, Fsettings, ds)
local Out = nil
local Fsettings=(Fsettings or {})
local Step = (Fsettings.Step or 0.02)
local MaxStep = (Fsettings.MaxStep or 0.2)
&nbsp;&nbsp;&nbsp;if I == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp = {pp=nil, p=nil}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it = {ppp=0, pp=0, 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 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it={ppp=it.pp, pp=it.p, p=I, l=it.l+1}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.pp = tmp.p
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local cand = {ppp=nil, pp=nil, p=nil}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p = {Val = nil, Step = 0, Ext = 0, Long = true}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cand.p = {H = GetValueEX(it.p,HIGH,ds), L = GetValueEX(it.p,LOW,ds)}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l==2 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p = {Val = GetValueEX(it.p,HIGH,ds), Step = Step, Ext = cand.p.H, Long = true}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l &#62; 2 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local Revers = false
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p.Val = tmp.pp.Val + tmp.pp.Step * (tmp.pp.Ext - tmp.pp.Val)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p.Long = tmp.pp.Long
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p.Ext = tmp.pp.Ext
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p.Step = tmp.pp.Step
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if tmp.pp.Long then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if cand.p.L &#60; tmp.p.Val then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p = {Val = tmp.pp.Ext, Step = Step, Ext = cand.p.L, Long = false}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Revers = true
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if cand.p.H &#62; tmp.p.Val then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p = {Val = tmp.pp.Ext, Step = Step, Ext = cand.p.H, Long = true}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Revers = true
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not Revers then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cand.pp = {H = GetValueEX(it.pp,HIGH,ds), L = GetValueEX(it.pp,LOW,ds)}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cand.ppp = {H = GetValueEX(it.ppp,HIGH,ds), L = GetValueEX(it.ppp,LOW,ds)}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if tmp.pp.Long then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if cand.p.H &#62; tmp.pp.Ext then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p.Ext = cand.p.H
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p.Step = tmp.pp.Step + Step
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if tmp.p.Step &#62; MaxStep then tmp.p.Step = MaxStep end
&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;&nbsp;if cand.pp.L &#60; tmp.p.Val then tmp.p.Val = cand.pp.L end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if cand.ppp.L &#60; tmp.p.Val then tmp.p.Val = cand.ppp.L end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if cand.p.L &#60; tmp.pp.Ext then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p.Ext = cand.p.L
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.p.Step = tmp.pp.Step + Step
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if tmp.p.Step &#62; MaxStep then tmp.p.Step = MaxStep end
&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;&nbsp;if cand.pp.H &#62; tmp.p.Val then tmp.p.Val = cand.pp.H end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if cand.ppp.H &#62; tmp.p.Val then tmp.p.Val = cand.ppp.H end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return tmp.p.Val
&nbsp;&nbsp;&nbsp;end
return nil
end
end

SMA,MMA,EMA,WMA,SMMA,VMA = "SMA","MMA","EMA","WMA","SMMA","VMA"
OPEN,HIGH,LOW,CLOSE,VOLUME,MEDIAN,TYPICAL,WEIGHTED,DIFFERENCE,ANY = "O","H","L","C","V","M","T","W","D","A"

function CandleExist(I,ds)
return (type(C)=="function" and C(I)~=nil) or
&nbsp;&nbsp;&nbsp;(type(ds)=="table" and (ds&#91;I&#93;~=nil or (type(ds.Size)=="function" and (I&#62;0) and (I&#60;=ds:Size()))))
end

function Squeeze(I,P)
&nbsp;&nbsp;&nbsp;return math.fmod(I-1,P+1)
end

function ConvertValue(T,...)
local function r(V, R) 
&nbsp;&nbsp;&nbsp;if R and string.upper(R)== "ON" then R=0 end
&nbsp;&nbsp;&nbsp;if V and tonumber(R) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if V &#62;= 0 then return math.floor(V * 10^R + 0.5) / 10^R
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else return math.ceil(V * 10^R - 0.5) / 10^R end
&nbsp;&nbsp;&nbsp;else return V end
end
local arg = {...}
arg.n = select('#', ...)
&nbsp;&nbsp;&nbsp;if arg.n &#62; 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, arg.n do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg&#91;i&#93;=arg&#91;i&#93; and r(arg&#91;i&#93; * ((T and T.Multiply) or 1), (T and T.Round) or "off")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return table.unpack(arg)
&nbsp;&nbsp;&nbsp;else return nil end
end


function GetValueEX(I,VT,ds) 
VT=(VT and string.upper(string.sub(VT,1,1))) or ANY
&nbsp;&nbsp;&nbsp;if VT == OPEN then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Open
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (O and O(I)) or (ds and ds:O(I))
&nbsp;&nbsp;&nbsp;elseif VT == HIGH then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--High
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (H and H(I)) or (ds and ds:H(I))
&nbsp;&nbsp;&nbsp;elseif VT == LOW then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Low
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (L and L(I)) or (ds and ds:L(I))
&nbsp;&nbsp;&nbsp;elseif VT == CLOSE then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Close
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (C and C(I)) or (ds and ds:C(I))
&nbsp;&nbsp;&nbsp;elseif VT == VOLUME then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Volume
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (V and V(I)) or (ds and ds:V(I)) 
&nbsp;&nbsp;&nbsp;elseif VT == MEDIAN then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Median
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ((GetValueEX(I,HIGH,ds) + GetValueEX(I,LOW,ds)) / 2)
&nbsp;&nbsp;&nbsp;elseif VT == TYPICAL then&nbsp;&nbsp;&nbsp;--Typical
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3)
&nbsp;&nbsp;&nbsp;elseif VT == WEIGHTED then&nbsp;&nbsp;&nbsp;--Weighted
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4) 
&nbsp;&nbsp;&nbsp;elseif VT == DIFFERENCE then&nbsp;&nbsp;&nbsp;--Difference
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds))
&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Any
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (ds and ds&#91;I&#93;)
&nbsp;&nbsp;&nbsp;end
return nil
end
</pre>
=============
<br />=============<br /> <br />
			<i>06.09.2023 20:17:50, Артем.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message71863/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message71863/topic1157/</guid>
			<pubDate>Wed, 06 Sep 2023 20:17:50 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message71862/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			<br />====quote====<br /> написал:<br />Добрый день!<br />Подскажите где взять indicators.zip под lua 5.4. У меня часть индикаторов на 5.4. и вместе на одном графике они не уживаются с 5.3.<br />=============<br /> indicators.zip &nbsp;Это какой-то архив?<br />Вы где его взяли? <br />Вы думаете, что все должны знать, что у Вас в этом архиве? <br />
			<i>06.09.2023 19:41:09, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message71862/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message71862/topic1157/</guid>
			<pubDate>Wed, 06 Sep 2023 19:41:09 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
		<item>
			<title>Все индикаторы на Lua</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message71847/topic1157/">Все индикаторы на Lua</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Добрый день!<br />Подскажите где взять indicators.zip под lua 5.4. У меня часть индикаторов на 5.4. и вместе на одном графике они не уживаются с 5.3. <br />
			<i>06.09.2023 10:00:59, Артем.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message71847/topic1157/</link>
			<guid>http://forum.quik.ru/messages/forum17/message71847/topic1157/</guid>
			<pubDate>Wed, 06 Sep 2023 10:00:59 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
	</channel>
</rss>
