<?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>Sun, 03 May 2026 11:32:12 +0300</pubDate>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65161/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_q5tdmv1D" href="/user/15673/" bx-tooltip-user-id="15673">Евгений</a> написал:<br />Возникла новая проблема - получить значения индикатора с нескольких предыдущих свечек. Пробовал поменять запрос so1,so2=funcSo(ds:Size(),.. &nbsp;на so1,so2=funcSo(ds:Size()-1,... или менял цикл &nbsp;for i=1,ds:Size() do &nbsp;на &nbsp;for i=1,ds:Size()-1 do, получается ерунда. Подскажите?<br />=============<br />чтобы получить значения индикатора с предыдущих свечей надо сохранять значения индикатора в массиве<br />тогда значения предыдущие читаете из массива по индексу влево от длины массива.<br />т е <br />local t={}<br />t&#91;#t+1&#93;=текущее значение индикатора<br /><br />читаем значение на 1 свечу назад<br />x=t&#91;#t-1&#93;<br />на 2 свечи<br />x=t&#91;#t-2&#93; <br />
			<i>25.08.2022 12:16:17, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65161/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65161/topic7499/</guid>
			<pubDate>Thu, 25 Aug 2022 12:16:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65159/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_3q4iM7Qs" href="/user/15673/" bx-tooltip-user-id="15673">Евгений</a> написал:<br />Возникла новая проблема - получить значения индикатора с нескольких предыдущих свечек. Пробовал поменять запрос so1,so2=funcSo(ds:Size(),.. &nbsp;на so1,so2=funcSo(ds:Size()-1,... или менял цикл &nbsp;for i=1,ds:Size() do &nbsp;на &nbsp;for i=1,ds:Size()-1 do, получается ерунда. Подскажите?<br />=============<br />так как вы хотите использовать этот индикатор без отображения на графике то для начала исправьте исходный файл и уберите все лишнее:<br />1) надо выкинуть это:
====code====
<pre>Settings = {
Name = "*SO (Stochastic Oscillator)", 
Period = 5, 
Metod = "SMA", --(SMA, MMA, EMA, WMA, SMMA, VMA)
Shift = 3, 
Period_D = 3, 
Metod_D = "SMA", --(SMA, MMA, EMA, WMA, SMMA, VMA)
line = {{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "Horizontal line (top)",
&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 = "Horizontal line (bottom)",
&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 = "SO", 
&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;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "SO - %D", 
&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;},
Round = "off",
Multiply = 1,
Horizontal_line="30"
}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
function Init()
&nbsp;&nbsp; func = SO()
&nbsp;&nbsp; return #Settings.line
end

function OnCalculate(Index) 
local Out1,Out2 = ConvertValue(Settings, func(Index, Settings))
local HL = tonumber(Settings.Horizontal_line)
&nbsp;&nbsp; if HL then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 50+HL,50-HL,Out1,Out2
&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil,nil,Out1,Out2
&nbsp;&nbsp; end
end

</pre>
=============
2) Из большого числа скользящих средних взять то, которое будете использовать <br />Остальное выкинуть.<br />-------------------<br />3) Переписать &nbsp;функцию SO, указав в ней функцию из 2<br />--------------------------<br />В результате у Вас будет скрипт очень похожий на то, что я написал Выше.<br />в итоге не будет кучи ошибок и все будет просто и понятно.<br />-----------<br />Если захотите другую функцию сглаживания то просто замените ее в скрипте. <br />
			<i>25.08.2022 12:01:59, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65159/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65159/topic7499/</guid>
			<pubDate>Thu, 25 Aug 2022 12:01:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65154/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Возникла новая проблема - получить значения индикатора с нескольких предыдущих свечек. Пробовал поменять запрос so1,so2=funcSo(ds:Size(),.. &nbsp;на so1,so2=funcSo(ds:Size()-1,... или менял цикл &nbsp;for i=1,ds:Size() do &nbsp;на &nbsp;for i=1,ds:Size()-1 do, получается ерунда. Подскажите? <br />
			<i>25.08.2022 08:27:33, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65154/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65154/topic7499/</guid>
			<pubDate>Thu, 25 Aug 2022 08:27:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65152/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_lrbc7mrh" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br /> &nbsp; &nbsp; &nbsp;Цитата &nbsp; &nbsp; &nbsp; &nbsp; Евгений &nbsp; &nbsp;написал: <br /> &nbsp;<br />====quote====<br /> &nbsp;Подскажите, где можно посмотреть примеры запросов к индикаторам? <br />=============<br /> &nbsp; Функции для работы с графиками <br /> &nbsp; &nbsp; Получить количество строк <br /> &nbsp; getNumCandles <br /> &nbsp; Получитьcan<br />====quote====<br /><a class="blog-p-user-name" id="bp_zmYlapvX" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br /> &nbsp; &nbsp; &nbsp;Цитата &nbsp; &nbsp; &nbsp; &nbsp; Евгений &nbsp; &nbsp;написал: <br /> &nbsp;<br />====quote====<br /> &nbsp; никольц &nbsp; &nbsp; написал: <br /> &nbsp;Цитата Евгений написал: &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; Цитата &nbsp; &nbsp; &nbsp; &nbsp; Николай написал: &nbsp;<br /> &nbsp;А Вы используете этот код как индикатор или как скрипт? &nbsp;<br /><br /><br /> &nbsp;Если как скрипт, то не забывайте передавать поток данных, для которого даже есть переменная ds. &nbsp; Или, возможно, Вы просто переопределили глобальную переменную C, например С = 5. Что делать в индикаторе нельзя. &nbsp; Да и в скрипте тоже, если используете этот код, т.к. (C and C(I)) просто проверяет на nil, а уж число там или нет уже не проверяет. &nbsp;<br />=============<br /> &nbsp; Как скрипт, ds есть Вычисление стохастика по ВИКИ элементарно просто: &nbsp;<br /> &nbsp;--------------------- &nbsp;<br /> &nbsp;x=100*(C(i)-Ln)/(Hn-Ln); K=Filt(AL1,K,x); D=Filt(AL,D,K); &nbsp;<br /> &nbsp;--------------------------- &nbsp;<br /> &nbsp;где Hn и Ln - это максимум и минимум на интервале N &nbsp;<br /> &nbsp;а Filt - это мувинг , например, такой: K=Filt(AL1,K,x); &nbsp;<br /> &nbsp;------------------------------ &nbsp;<br /> &nbsp;Т е все до безобразия примитивно и просто, как и вся финансовая математика. &nbsp;<br /> &nbsp;--------------- &nbsp;<br /> &nbsp;сравните это с монстром, который вам подсунули. &nbsp;<br /> &nbsp;================= &nbsp;<br /> &nbsp;Для справки - стохастик - это примитивный полосовой фильтр &nbsp;<br /> &nbsp;с очень плохими фильтрующими свойствами. &nbsp;<br /> &nbsp;Параметры этого фильтра биржевые игроки подбирают методом тыка. &nbsp; &nbsp; Для меня это не очень просто, т.к. данную формулу нужно адаптировать для своего скрипта, ведь так? &nbsp; Причём делать эту нужно для каждого индикатора, с которым захочется поработать. &nbsp; Пробовал я по другому индикатору это сделать - работает, но значения не те. &nbsp; Всё же, думаю, что удобнее всего было бы получать значения индикатора через запрос к файлу индикатора. &nbsp; Подскажите, где можно посмотреть примеры запросов к индикаторам? &nbsp; напишите, что хотите сделать. <br /> Если Вы делаете индикатор и в нем будете делать робота, то можно использовать код который указали Выше. &nbsp; если вы не можете запустить его как индикатор, то могу выложить немного исправленный этот код который без проблем запускается как индикатор. <br /> ----------------- <br /> если хотите как-то иначе использовать этот индикатор, то напишите подробнее, что хотите сделать. <br /> будет настроение, подскажу как. <br />=============<br /><br /> &nbsp;<br />=============<br /> &nbsp;Пишу робота, который запрашивает показания индикатора из его файла (в папке LuaIndicators), т.е.не открывая график и, исходя из полученных данных, выполняет транзакции. getNumCandles только с графика берёт данные, как я понял.<br /> &nbsp;В приведённом мною фрагменте кода для запроса данных с файла индикатора я нашёл ошибку - не хватало <br />end<br />while true do :<br />
====code====
<pre>&nbsp;&nbsp;&nbsp;&nbsp;dofile(&nbsp;&nbsp;getWorkingFolder&nbsp;&nbsp;()&nbsp;&nbsp;..&nbsp;&nbsp; '&#92;&#92;LuaIndicators&#92;&#92;SO.lua'&nbsp;&nbsp;)
funcSo&nbsp;&nbsp; =&nbsp;&nbsp; SO()
&nbsp;&nbsp;..&nbsp;&nbsp;.

&nbsp;&nbsp;for&nbsp;&nbsp; i&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;,ds:&nbsp;&nbsp;Size&nbsp;&nbsp;()&nbsp;&nbsp; do&nbsp;&nbsp;
so1, so2&nbsp;&nbsp; =&nbsp;&nbsp; funcSo(i, {Period&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;, Metod&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; "SMA"&nbsp;&nbsp;, Shift&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;, Period_D&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;, Metod_D&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; "SMA"&nbsp;&nbsp;}, ds)

end 
while true do

so1, so2&nbsp;&nbsp; =&nbsp;&nbsp; funcSo(ds:&nbsp;&nbsp;Size&nbsp;&nbsp;(), {Period&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;, Metod&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; "SMA"&nbsp;&nbsp;, Shift&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;, Period_D&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;, Metod_D&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; "SMA"&nbsp;&nbsp;}, ds)
&nbsp;&nbsp;end 

</pre>
============= <br />
			<i>25.08.2022 08:19:51, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65152/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65152/topic7499/</guid>
			<pubDate>Thu, 25 Aug 2022 08:19:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65140/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_6a5VutgR" href="/user/15673/" bx-tooltip-user-id="15673">Евгений</a> написал:<br /> <br />====quote====<br /> Подскажите, где можно посмотреть примеры запросов к индикаторам?<br /><br />=============<br /><br />=============<br />Функции для работы с графиками<br /><p></p><ul><li>getLinesCount<br /><li>getNumCandles<br /><li>getCandlesByIndex<br /></ul> <br />
			<i>24.08.2022 13:17:11, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65140/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65140/topic7499/</guid>
			<pubDate>Wed, 24 Aug 2022 13:17:11 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65135/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_WLvxdyTP" href="/user/15673/" bx-tooltip-user-id="15673">Евгений</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> написал:<br /> &nbsp; &nbsp; &nbsp;Цитата &nbsp; &nbsp; &nbsp; &nbsp; Евгений &nbsp; &nbsp;написал: <br /> &nbsp; <br />====quote====<br /> &nbsp; Николай &nbsp; &nbsp; написал: <br /> &nbsp;А Вы используете этот код как индикатор или как скрипт? &nbsp;<br /><br /><br /> &nbsp;Если как скрипт, то не забывайте передавать поток данных, для которого даже есть переменная ds. &nbsp; Или, возможно, Вы просто переопределили глобальную переменную C, например С = 5. Что делать в индикаторе нельзя. &nbsp; Да и в скрипте тоже, если используете этот код, т.к. (C and C(I)) просто проверяет на nil, а уж число там или нет уже не проверяет. &nbsp;<br />=============<br /> &nbsp; &nbsp;Как скрипт, ds есть &nbsp; Вычисление стохастика по ВИКИ элементарно просто: <br /> --------------------- <br /> x=100*(C(i)-Ln)/(Hn-Ln); K=Filt(AL1,K,x); D=Filt(AL,D,K); &nbsp;<br /> --------------------------- <br /> где Hn и Ln - это максимум и минимум на интервале N <br /> а Filt - это мувинг , например, такой: K=Filt(AL1,K,x); <br /> ------------------------------ <br /> Т е все до безобразия примитивно и просто, как и вся финансовая математика. <br /> --------------- <br /> сравните это с монстром, который вам подсунули. <br /> ================= <br /> Для справки - стохастик - это примитивный полосовой фильтр &nbsp;<br /> с очень плохими фильтрующими свойствами. <br /> Параметры этого фильтра биржевые игроки подбирают методом тыка. <br />=============<br /> Для меня это не очень просто, т.к. данную формулу нужно адаптировать для своего скрипта, ведь так? Причём делать эту нужно для каждого индикатора, с которым захочется поработать. Пробовал я по другому индикатору это сделать - работает, но значения не те. Всё же, думаю, что удобнее всего было бы получать значения индикатора через запрос к файлу индикатора. Подскажите, где можно посмотреть примеры запросов к индикаторам?<br />=============<br />напишите, что хотите сделать.<br />Если Вы делаете индикатор и в нем будете делать робота, то можно использовать код который указали Выше. если вы не можете запустить его как индикатор, то могу выложить немного исправленный этот код который без проблем запускается как индикатор.<br />-----------------<br />если хотите как-то иначе использовать этот индикатор, то напишите подробнее, что хотите сделать.<br />будет настроение, подскажу как. <br />
			<i>24.08.2022 11:34:35, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65135/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65135/topic7499/</guid>
			<pubDate>Wed, 24 Aug 2022 11:34:35 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65130/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_tdn6j43W" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br /> &nbsp; &nbsp; &nbsp;Цитата &nbsp; &nbsp; &nbsp; &nbsp; Евгений &nbsp; &nbsp;написал: <br /> &nbsp;<br />====quote====<br /> &nbsp; Николай &nbsp; &nbsp; написал: <br /> &nbsp;А Вы используете этот код как индикатор или как скрипт? &nbsp;<br /><br /><br /> &nbsp;Если как скрипт, то не забывайте передавать поток данных, для которого даже есть переменная ds. &nbsp; Или, возможно, Вы просто переопределили глобальную переменную C, например С = 5. Что делать в индикаторе нельзя. &nbsp; Да и в скрипте тоже, если используете этот код, т.к. (C and C(I)) просто проверяет на nil, а уж число там или нет уже не проверяет. &nbsp;<br />=============<br /> &nbsp; Как скрипт, ds есть &nbsp; Вычисление стохастика по ВИКИ элементарно просто: <br /> --------------------- <br /> x=100*(C(i)-Ln)/(Hn-Ln); K=Filt(AL1,K,x); D=Filt(AL,D,K); &nbsp;<br /> --------------------------- <br /> где Hn и Ln - это максимум и минимум на интервале N <br /> а Filt - это мувинг , например, такой: K=Filt(AL1,K,x); <br /> ------------------------------ <br /> Т е все до безобразия примитивно и просто, как и вся финансовая математика. <br /> --------------- <br /> сравните это с монстром, который вам подсунули. <br /> ================= <br /> Для справки - стохастик - это примитивный полосовой фильтр &nbsp;<br /> с очень плохими фильтрующими свойствами. <br /> Параметры этого фильтра биржевые игроки подбирают методом тыка. <br />=============<br />Для меня это не очень просто, т.к. данную формулу нужно адаптировать для своего скрипта, ведь так? Причём делать эту нужно для каждого индикатора, с которым захочется поработать. Пробовал я по другому индикатору это сделать - работает, но значения не те. Всё же, думаю, что удобнее всего было бы получать значения индикатора через запрос к файлу индикатора. Подскажите, где можно посмотреть примеры запросов к индикаторам? <br />
			<i>23.08.2022 18:52:09, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65130/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65130/topic7499/</guid>
			<pubDate>Tue, 23 Aug 2022 18:52:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65063/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_chBGhwLc" href="/user/15673/" bx-tooltip-user-id="15673">Евгений</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/3132/" target="_blank" rel="nofollow">Nikolay</a></noindex> написал:<br /> А Вы используете этот код как индикатор или как скрипт? &nbsp;<br /><br /><br /> Если как скрипт, то не забывайте передавать поток данных, для которого даже есть переменная ds. &nbsp; Или, возможно, Вы просто переопределили глобальную переменную C, например С = 5. Что делать в индикаторе нельзя. &nbsp; Да и в скрипте тоже, если используете этот код, т.к. (C and C(I)) &nbsp; &nbsp; просто проверяет на nil, а уж число там или нет уже не проверяет. <br />=============<br /> Как скрипт, ds есть<br />=============<br />Вычисление стохастика по ВИКИ &nbsp;элементарно просто:<br />---------------------<br />x=100*(C(i)-Ln)/(Hn-Ln); &nbsp;K=Filt(AL1,K,x); &nbsp; &nbsp;D=Filt(AL,D,K); <br />---------------------------<br />где &nbsp;Hn и Ln &nbsp;- это максимум и минимум на интервале N<br />а Filt - это мувинг , например, &nbsp;такой: &nbsp;K=Filt(AL1,K,x);<br />------------------------------<br />Т е все до безобразия примитивно и просто, как и вся финансовая математика.<br />---------------<br />сравните это с монстром, который вам подсунули.<br />=================<br />Для справки &nbsp;- стохастик - это примитивный полосовой фильтр <br />с очень плохими фильтрующими свойствами.<br />Параметры этого фильтра биржевые игроки подбирают методом тыка. <br />
			<i>21.08.2022 19:12:03, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65063/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65063/topic7499/</guid>
			<pubDate>Sun, 21 Aug 2022 19:12:03 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65062/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Брать данные с графика - это крайний вариант, когда неизвестен алгоритм построения. А когда известно, то зачем. Тем более, что приведенный пример - очень неаккуратный. При этом очень неэффективен по памяти.<br /><br />Что касается этого случая, добавьте дебаг сообщения в лог, если есть или &nbsp;типа такого message(&quot;C &quot;..type&#169;..&#39;&#39; &quot;..tostring&#169;)<br /><br />И смотрите где теряете переменную. <br />
			<i>21.08.2022 09:45:41, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65062/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65062/topic7499/</guid>
			<pubDate>Sun, 21 Aug 2022 09:45:41 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65061/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_dTsRv4I2" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br /> <br />====quote====<br /> &nbsp;Евгений &nbsp; &nbsp;написал: <br /> &nbsp;<br />====quote====<br /> <noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> &nbsp;написал:<br /> &nbsp; &nbsp; &nbsp;Цитата &nbsp; &nbsp; &nbsp; &nbsp; Евгений &nbsp; &nbsp;написал: <br /> function Init() <br /> &nbsp;func = SO() <br /> &nbsp;return #Settings.line <br /> end &nbsp; попробуйте перенести функцию Init в самый конец скрипта <br />=============<br /> &nbsp; Здравствуйте. <br /> Не помогло. <br /> Ошибку &quot;311:attempt to call a number value (global &#39;C&#39;)&quot; удалось убрать, поменяв в моём коде, который обращается к файлу индикатора цену C на c. <br /> Но значения индикатора не удаётся получить, появляется ошибка &quot;attempt to concatenate a nil value (global &#39;so2&#39;)&quot;. <br /> Видимо я неправильно обращаюсь к индикатору, хотя по подобному запросу к PSAR скрипт получает значения: &nbsp; 
====code====
<pre>&nbsp;&nbsp;&nbsp;&nbsp;dofile(&nbsp;&nbsp;getWorkingFolder&nbsp;&nbsp;()&nbsp;&nbsp;..&nbsp;&nbsp; '&#92;&#92;LuaIndicators&#92;&#92;SO.lua'&nbsp;&nbsp;)
funcSo&nbsp;&nbsp; =&nbsp;&nbsp; SO()
&nbsp;&nbsp;..&nbsp;&nbsp;.

&nbsp;&nbsp;for&nbsp;&nbsp; i&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;,ds:&nbsp;&nbsp;Size&nbsp;&nbsp;()&nbsp;&nbsp; do&nbsp;&nbsp;
so1, so2&nbsp;&nbsp; =&nbsp;&nbsp; funcSo(i, {Period&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;, Metod&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; "SMA"&nbsp;&nbsp;, Shift&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;, Period_D&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;, Metod_D&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; "SMA"&nbsp;&nbsp;}, ds)
so1, so2&nbsp;&nbsp; =&nbsp;&nbsp; funcSo(ds:&nbsp;&nbsp;Size&nbsp;&nbsp;(), {Period&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;, Metod&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; "SMA"&nbsp;&nbsp;, Shift&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;, Period_D&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;, Metod_D&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp;&nbsp; "SMA"&nbsp;&nbsp;}, ds)
&nbsp;&nbsp;end&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;</pre>
=============
 &nbsp;<br />=============<br /> &nbsp;вы пытаетесь использовать монстра который нагородили разработчики, но они его сами не применяют в квике. <br /> --------------- &nbsp;<br /> Проще всего поместите встроенный этот индикатор на график, задайте идентификатор и прочитайте значения с графика. &nbsp; В результате получите ровно то, что увидите. <br /> -------------- &nbsp;<br /> если надо скрипт на луа, то либо найдите существенно более простой код что то что взяли, либо напишите сами по формуле из вики. <br />=============<br />С графика беру, но не всегда это удобно и быстро. По формуле написать - интересный вариант, но было бы здорово иметь универсальный метод - запрос в луа к индикатору. <br />
			<i>20.08.2022 20:14:39, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65061/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65061/topic7499/</guid>
			<pubDate>Sat, 20 Aug 2022 20:14:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65060/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_wzhzHMq6" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br /> А Вы используете этот код как индикатор или как скрипт? &nbsp;<br /><br /><br /> Если как скрипт, то не забывайте передавать поток данных, для которого даже есть переменная ds. &nbsp; Или, возможно, Вы просто переопределили глобальную переменную C, например С = 5. Что делать в индикаторе нельзя. &nbsp; Да и в скрипте тоже, если используете этот код, т.к. (C and C(I)) &nbsp; &nbsp; просто проверяет на nil, а уж число там или нет уже не проверяет. <br />=============<br />Как скрипт, ds есть. <br />
			<i>20.08.2022 20:07:36, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65060/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65060/topic7499/</guid>
			<pubDate>Sat, 20 Aug 2022 20:07:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65050/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			удивляюсь, как можно такой простой индикатор изложить в виде такого громадного количества операторов.<br />Полагаю, что разработчику платили по количеству операторов. <br />
			<i>19.08.2022 13:23:09, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65050/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65050/topic7499/</guid>
			<pubDate>Fri, 19 Aug 2022 13:23:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65049/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			по форме этот индикатор написан правильно, но по сути - это издевательство над пользователями.<br />Писавший эти индикаторы совершенно не понимает зачем они нужны. <br />
			<i>19.08.2022 13:16:58, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65049/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65049/topic7499/</guid>
			<pubDate>Fri, 19 Aug 2022 13:16:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65048/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_R17RQ2IH" href="/user/15673/" bx-tooltip-user-id="15673">Евгений</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> написал:<br /> &nbsp; &nbsp; &nbsp;Цитата &nbsp; &nbsp; &nbsp; &nbsp; Евгений &nbsp; &nbsp;написал: <br /> function Init() <br /> &nbsp;func = SO() <br /> &nbsp;return #Settings.line <br /> end &nbsp; попробуйте перенести функцию Init в самый конец скрипта <br />=============<br /> Здравствуйте.<br />Не помогло.<br />Ошибку &quot;311:attempt to call a number value (global &#39;C&#39;)&quot; удалось убрать, поменяв в моём коде, который обращается к файлу индикатора цену C на c.<br />Но значения индикатора не удаётся получить, появляется ошибка &quot;attempt to concatenate a nil value (global &#39;so2&#39;)&quot;.<br />Видимо я неправильно обращаюсь к индикатору, хотя по подобному запросу к PSAR скрипт получает значения: 
====code====
<pre>&nbsp;&nbsp;dofile( getWorkingFolder () .. '&#92;&#92;LuaIndicators&#92;&#92;SO.lua' )
funcSo&nbsp;&nbsp;=&nbsp;&nbsp;SO()
 .. .

 for&nbsp;&nbsp;i =&nbsp;&nbsp;1 ,ds: Size ()&nbsp;&nbsp;do 
so1, so2&nbsp;&nbsp;=&nbsp;&nbsp;funcSo(i, {Period&nbsp;&nbsp;=&nbsp;&nbsp; 5 , Metod&nbsp;&nbsp;=&nbsp;&nbsp; "SMA" , Shift&nbsp;&nbsp;=&nbsp;&nbsp; 3 , Period_D&nbsp;&nbsp;=&nbsp;&nbsp; 3 , Metod_D&nbsp;&nbsp;=&nbsp;&nbsp; "SMA" }, ds)
so1, so2&nbsp;&nbsp;=&nbsp;&nbsp;funcSo(ds: Size (), {Period&nbsp;&nbsp;=&nbsp;&nbsp; 5 , Metod&nbsp;&nbsp;=&nbsp;&nbsp; "SMA" , Shift&nbsp;&nbsp;=&nbsp;&nbsp; 3 , Period_D&nbsp;&nbsp;=&nbsp;&nbsp; 3 , Metod_D&nbsp;&nbsp;=&nbsp;&nbsp; "SMA" }, ds)
 end 
&nbsp;&nbsp;</pre>
=============
 <br />=============<br />вы пытаетесь использовать монстра который нагородили разработчики, но они его сами не применяют в квике.<br />--------------- <br />Проще всего поместите встроенный этот индикатор &nbsp;на график, задайте идентификатор и прочитайте значения с графика. В результате получите ровно то, что увидите.<br />-------------- &nbsp;<br />если надо скрипт на луа, то либо найдите существенно более простой код что то что взяли, либо напишите сами по формуле из вики. <br />
			<i>19.08.2022 13:12:29, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65048/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65048/topic7499/</guid>
			<pubDate>Fri, 19 Aug 2022 13:12:29 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65046/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			А Вы используете этот код как индикатор или как скрипт? <br /><br /><br />Если как скрипт, то не забывайте передавать поток данных, для которого даже есть переменная ds. Или, возможно, Вы просто переопределили глобальную переменную C, например С = 5. Что делать в индикаторе нельзя. Да и в скрипте тоже, если используете этот код, т.к. (C and C(I))<B> </B>просто проверяет на nil, а уж число там или нет уже не проверяет. <br />
			<i>19.08.2022 09:31:50, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65046/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65046/topic7499/</guid>
			<pubDate>Fri, 19 Aug 2022 09:31:50 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message65041/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_sBG1w6h7" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br /> &nbsp; &nbsp; &nbsp;Цитата &nbsp; &nbsp; &nbsp; &nbsp; Евгений &nbsp; &nbsp;написал: <br /> function Init() <br /> &nbsp;func = SO() <br /> &nbsp;return #Settings.line <br /> end &nbsp; попробуйте перенести функцию Init в самый конец скрипта <br />=============<br />Здравствуйте.<br />Не помогло.<br />Ошибку &quot;311:attempt to call a number value (global &#39;C&#39;)&quot; удалось убрать, поменяв в моём коде, который обращается к файлу индикатора цену C на c.<br />Но значения индикатора не удаётся получить, появляется ошибка &quot;attempt to concatenate a nil value (global &#39;so2&#39;)&quot;.<br />Видимо я неправильно обращаюсь к индикатору, хотя по подобному запросу к PSAR скрипт получает значения:
====code====
<pre>dofile(getWorkingFolder()..'&#92;&#92;LuaIndicators&#92;&#92;SO.lua' )
funcSo = SO()
...

for i=1,ds:Size() do
so1, so2 = funcSo(i, {Period = 5, Metod = "SMA", Shift = 3, Period_D = 3, Metod_D = "SMA"}, ds)
so1, so2 = funcSo(ds:Size(), {Period = 5, Metod = "SMA", Shift = 3, Period_D = 3, Metod_D = "SMA"}, ds)
end
</pre>
============= <br />
			<i>18.08.2022 18:54:43, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message65041/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message65041/topic7499/</guid>
			<pubDate>Thu, 18 Aug 2022 18:54:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64845/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_jw7fq19c" href="/user/15673/" bx-tooltip-user-id="15673">Евгений</a> написал:<br />function Init()<br /> &nbsp; func = SO()<br /> &nbsp; return #Settings.line<br />end<br />=============<br />попробуйте перенести функцию Init в самый конец скрипта <br />
			<i>10.08.2022 06:32:58, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64845/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64845/topic7499/</guid>
			<pubDate>Wed, 10 Aug 2022 06:32:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64843/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте.<br /><br />Не получилось воспроизвести проблему, просьба прислать нам на <noindex><a href="mailto:quiksupport@arqatech.com" target="_blank" rel="nofollow">quiksupport@arqatech.com</a></noindex> архив Вашего рабочего места QUIK без ключей pubring.txk и secring.txk, если они там присутствуют. Дополнительная просьба в письме укажите, пожалуйста, ссылку на данную ветвь форума. <br />
			<i>09.08.2022 20:37:21, Alexey Danin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64843/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64843/topic7499/</guid>
			<pubDate>Tue, 09 Aug 2022 20:37:21 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64842/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			QUIK 9.7.1.10, lua 5.3.5.и 5.4.1. <br />
			<i>09.08.2022 19:42:14, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64842/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64842/topic7499/</guid>
			<pubDate>Tue, 09 Aug 2022 19:42:14 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64625/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте.<br /><br />Просьба уточнить текущую версию используемого Вами терминала QUIK, также версию Lua-машины, в которой выполняется запуск индикатора. <br />
			<i>28.07.2022 09:41:55, Alexey Danin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64625/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64625/topic7499/</guid>
			<pubDate>Thu, 28 Jul 2022 09:41:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64388/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Весь код индикатора:
====code====
<pre>Settings = {
Name = "*SO (Stochastic Oscillator)", 
Period = 5, 
Metod = "SMA", --(SMA, MMA, EMA, WMA, SMMA, VMA)
Shift = 3, 
Period_D = 3, 
Metod_D = "SMA", --(SMA, MMA, EMA, WMA, SMMA, VMA)
line = {{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "Horizontal line (top)",
&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 = "Horizontal line (bottom)",
&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 = "SO", 
&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;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "SO - %D", 
&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;},
Round = "off",
Multiply = 1,
Horizontal_line="30"
}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
function Init()
&nbsp;&nbsp;&nbsp;func = SO()
&nbsp;&nbsp;&nbsp;return #Settings.line
end

function OnCalculate(Index) 
local Out1,Out2 = ConvertValue(Settings, func(Index, Settings))
local HL = tonumber(Settings.Horizontal_line)
&nbsp;&nbsp;&nbsp;if HL then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 50+HL,50-HL,Out1,Out2
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil,nil,Out1,Out2
&nbsp;&nbsp;&nbsp;end
end

function SO() --Stochastic Oscillator ("SO")
&nbsp;&nbsp;&nbsp;local K_MA1=MA()
&nbsp;&nbsp;&nbsp;local K_MA2=MA()
&nbsp;&nbsp;&nbsp;local D_MA=MA()
&nbsp;&nbsp;&nbsp;local H_tmp={}
&nbsp;&nbsp;&nbsp;local L_tmp={}
&nbsp;&nbsp;&nbsp;local it = {p=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local P = (Fsettings.Period or 5)
local S = (Fsettings.Shift or 3)
local M = (Fsettings.Metod or SMA)
local PD = (Fsettings.Period_D or 3)
local MD = (Fsettings.Metod_D or SMA)
if (P&#62;0) and (PD&#62;0) then
if I == 1 then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;H_tmp={}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L_tmp={}
&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;H_tmp&#91;Squeeze(it.l,P-1)+1&#93; = GetValueEX(it.p,HIGH,ds)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L_tmp&#91;Squeeze(it.l,P-1)+1&#93; = GetValueEX(it.p,LOW,ds)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l&#62;=P then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local val_h=math.max(table.unpack(H_tmp))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local val_l=math.min(table.unpack(L_tmp))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local v_K_MA1 = K_MA1(it.l-P+1, {Period=S, Metod = M, VType=ANY},{&#91;it.l-P+1&#93; = GetValueEX(it.p,CLOSE,ds) - val_l})
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local v_K_MA2 = K_MA2(it.l-P+1, {Period=S, Metod = M, VType=ANY},{&#91;it.l-P+1&#93; = val_h - val_l})
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l&#62;=P+S-1 and v_K_MA2~=0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local t_K = 100 * v_K_MA1 / v_K_MA2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return t_K, D_MA(it.l-(P+S-2), {Period=PD, Metod = MD, VType=ANY}, {&#91;it.l-(P+S-2)&#93; = t_K})
&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
end
end

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

------------------------------------------------------------------
----Moving Average SMA, MMA, EMA, WMA, SMMA, VMA
------------------------------------------------------------------
--&#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

--&#91;&#91;Modified Moving Average (MMA)
MMA = (MMAi-1*(n-1) + Pi) / n&#93;&#93;
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;
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;
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;
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;
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


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 />
			<i>19.07.2022 10:26:56, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64388/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64388/topic7499/</guid>
			<pubDate>Tue, 19 Jul 2022 10:26:56 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64387/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Индикатор я не правил, 311 строка:<br />		return (C and C(I)) or (ds and ds:C(I)) <br />
			<i>19.07.2022 10:24:23, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64387/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64387/topic7499/</guid>
			<pubDate>Tue, 19 Jul 2022 10:24:23 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64384/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			в 311 строке SO.lua <br />
			<i>19.07.2022 09:18:21, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64384/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64384/topic7499/</guid>
			<pubDate>Tue, 19 Jul 2022 09:18:21 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64383/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_wpnfA7U3" href="/user/15673/" bx-tooltip-user-id="15673">Евгений</a> написал:<br />Здравствуйте.<br />При попытке расчёта стохастика квик выдаёт ошибку:<br />SO.lua:311:attempt to call a number value (global &#39;C&#39;).<br />Подскажите, пожалуйста, что может быть.<br />=============<br />Возможно неправильно указали параметр.<br />покажите как вызываете. <br />
			<i>19.07.2022 09:17:49, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64383/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64383/topic7499/</guid>
			<pubDate>Tue, 19 Jul 2022 09:17:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при расчёте стохастика</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64379/topic7499/">Ошибка при расчёте стохастика</a></b> <i>Выдаёт ошибку при обращении к SO.lua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте.<br />При попытке расчёта стохастика квик выдаёт ошибку:<br />SO.lua:311:attempt to call a number value (global &#39;C&#39;).<br />Подскажите, пожалуйста, что может быть. <br />
			<i>19.07.2022 08:56:59, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64379/topic7499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64379/topic7499/</guid>
			<pubDate>Tue, 19 Jul 2022 08:56:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
