<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Вызов RSI]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Вызов RSI форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 03 May 2026 17:03:52 +0300</pubDate>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21272/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_YYEGcZ33" href="/user/17/" bx-tooltip-user-id="17">Sergey Gorokhov</a> написал:<br />Xn=Xпред + 1<br />где Xпред это предыдущее значение X<br /><br />=============<br /><br />Чтобы понятней было перепишем формулу так:<br /><span class="bx-font" style="font-size:12pt; line-height: normal;">X</span><span class="bx-font" style="font-size:8pt; line-height: normal;">n</span>=<span class="bx-font" style="font-size:12pt; line-height: normal;">X</span><span class="bx-font" style="font-size:8pt; line-height: normal;">n-1</span><span class="bx-font" style="font-size:12pt; line-height: normal;">+1</span> <br />
			<i>22.12.2016 08:48:09, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21272/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21272/topic2378/</guid>
			<pubDate>Thu, 22 Dec 2016 08:48:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21271/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_kNlwUBp3" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a>, <br /><br />Специально для Вас, пример по проще.<br /><br />есть формула <br />Xn=Xпред + 1<br /><br />где Xпред это предыдущее значение X<br /><br />Как по формуле узнать последние 50 значений X из 100 имеющихся?<br />Никак. Просто потому что для расчета надо знать чему равно X1 и от него уже подсчитать все остальные. <br /><br />Вот по этому, еще в четвертый раз повторяем.<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_gHPqXq25" href="/user/17/" bx-tooltip-user-id="17">Sergey Gorokhov</a> написал:<br />Индикатор RSI строится по EMA, которому нужен расчет по предыдущим значениям. <br />=============<br /><br />Если Вам нужно получить последние 50 свечек, будьте добры предварительно подсчитать и первые свечки.<br />Просто такая формула. <br />
			<i>22.12.2016 08:41:07, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21271/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21271/topic2378/</guid>
			<pubDate>Thu, 22 Dec 2016 08:41:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21270/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_C7z6nzrD" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a> написал:<br />Придётся Вас "добить" формулой EMA.<br /><br />=============<br /><br />Как по Вашему что такое "EMAi-1" ??<br />Вы не поверите, но это предыдущее значение EMA <br />
			<i>22.12.2016 08:34:50, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21270/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21270/topic2378/</guid>
			<pubDate>Thu, 22 Dec 2016 08:34:50 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21269/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Придётся Вас &quot;добить&quot; формулой EMA.<br />У её расчётов есть начало и конец<br /><br /><img src="http://content.screencast.com/users/astro-12/folders/Snagit/media/f0a2567c-0e68-465a-ae21-3db06c7a1a72/12.22.2016-08.31.png" alt="Пользователь добавил изображение" border="0" /> <br />
			<i>22.12.2016 08:32:07, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21269/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21269/topic2378/</guid>
			<pubDate>Thu, 22 Dec 2016 08:32:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21268/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_dFm5DAt1" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a>, <br /><br />Вот именно что в расчетах используется скользящая средняя. <br /><br />То есть в третий раз повторяем ответ:<br /><br />====quote====<br />Индикатор RSI строится по EMA, которому нужен расчет по предыдущим значениям. <br />=============<br /> <br />
			<i>22.12.2016 08:28:35, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21268/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21268/topic2378/</guid>
			<pubDate>Thu, 22 Dec 2016 08:28:35 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21267/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вы заблуждаетесь. Вот формула RSI из вашего же руководства КВИКа<br /><br /><img src="http://content.screencast.com/users/astro-12/folders/Snagit/media/69819e48-df95-40a1-a448-b5c84eb0adfe/12.22.2016-08.25.png" alt="Пользователь добавил изображение" border="0" /> <br />
			<i>22.12.2016 08:26:45, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21267/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21267/topic2378/</guid>
			<pubDate>Thu, 22 Dec 2016 08:26:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21266/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_EkuKZZfc" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a>, <br />Это Вы не уловили нить ответа.<br />RSI <B>требует </B>согласно формуле, свои предыдущие значения.<br />Это особенность данного индикатора.<br />Даже если Вам надо только 50 последних свечей он в принципе не сможет Вам их дать не проведя расчет предыдущих. <br />Просто такая формула. <br />
			<i>22.12.2016 08:19:08, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21266/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21266/topic2378/</guid>
			<pubDate>Thu, 22 Dec 2016 08:19:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21265/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Сергей, Вы не уловили нить вопроса.<br />Я хочу расчитать RSI с периодом 12. Нет смысла брать все бары. Поэтому я хочу взять только последние 50. <br />
			<i>22.12.2016 08:13:03, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21265/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21265/topic2378/</guid>
			<pubDate>Thu, 22 Dec 2016 08:13:03 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21262/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_oQpPdqOL" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a> написал:<br />а только 50 последних.<br /><br />=============<br /><br />Ответ уже был дан.<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_QiVzKrvJ" href="/user/17/" bx-tooltip-user-id="17">Sergey Gorokhov</a> написал:<br />Индикатор RSI строится по EMA, которому нужен расчет по предыдущим значениям. <br /><br />=============<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_c8Yfg45J" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a> написал:<br />И ещё не понятно, рационально ли рассчитывать RSI &nbsp;в колбеке SetUpdateCallback? <br />=============<br />Рационально или нет решать Вам. <br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_gU81v6Lc" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a> написал:<br />С этой точки зрения, правильно ли помещать CreateDataSource внутри main в цикле перебора бумаг?<br /><br />=============<br /><br />CreateDataSource достаточно вызвать 1 раз, не важно где. <br />Постоянно гонять его в цикле совершенно никакого смысла нет. <br />
			<i>22.12.2016 05:31:24, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21262/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21262/topic2378/</guid>
			<pubDate>Thu, 22 Dec 2016 05:31:24 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21260/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			На своём низком уровне понимания я разобрался. <br />Получилось так:<br />
====code====
<pre>function main()
dofile ("C:&#92;&#92;Program Files (x86)&#92;&#92;Lua&#92;&#92;5.1&#92;&#92;lua&#92;&#92;RSI.lua")
&nbsp;&nbsp;while is_run do
&nbsp;&nbsp;&nbsp;&nbsp;stime=getSTime()
&nbsp;&nbsp;&nbsp;&nbsp;if stime==nil then stime=0 end
&nbsp;&nbsp;&nbsp;&nbsp;sleep (1)

if stime&#62;100000 and stime&#60;184000 then --не считаем вне сессии
&nbsp;&nbsp;func = RSI()

for sec in string.gmatch(ticker_list,"%a+") do
local rsi_count={}
ds = CreateDataSource(class, sec, INTERVAL_M5) 
sleep (1000)
&nbsp;&nbsp;&nbsp;&nbsp;num_candles=ds:Size()
&nbsp;&nbsp;for i=1,num_candles do
&nbsp;&nbsp;&nbsp;&nbsp;rsi_count&#91;i&#93;=func(i, {Period=14, VType="Typical"}, ds)
&nbsp;&nbsp;end 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indicator&#91;sec&#93;.rsi_0 = rsi_count&#91;num_candles&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indicator&#91;sec&#93;.rsi_1 = rsi_count&#91;num_candles-1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indicator&#91;sec&#93;.rsi_2 = rsi_count&#91;num_candles-2&#93;

и так далее
</pre>
=============
<br />что самое противное (и не понятное), в нижеприведённом виде не работает! Ниже попытка считать не все бары, а только 50 последних.<br />
====code====
<pre>&nbsp;&nbsp;&nbsp;&nbsp;num_candles=ds:Size()
&nbsp;&nbsp;for i=num_candles-50,num_candles do
&nbsp;&nbsp;&nbsp;&nbsp;rsi_count&#91;i&#93;=func(i, {Period=14, VType="Typical"}, ds)
&nbsp;&nbsp;end </pre>
=============
И ещё не понятно, рационально ли рассчитывать RSI &nbsp;в колбеке SetUpdateCallback? Я хочу запрашивать обновлённый RSI довольно редко - раз в секунду, скорость не нужна. С этой точки зрения, правильно ли помещать CreateDataSource внутри main в цикле перебора бумаг?<br />Спасибо за советы. <br />
			<i>21.12.2016 23:20:15, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21260/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21260/topic2378/</guid>
			<pubDate>Wed, 21 Dec 2016 23:20:15 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21259/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			а как обратиться к конкретному бару? Скажем последнему или предпоследнему?<br />из вашего кода получается что переменная a постоянно будет менять значение, так как идёт перебор i-элемента <br />
			<i>21.12.2016 20:45:45, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21259/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21259/topic2378/</guid>
			<pubDate>Wed, 21 Dec 2016 20:45:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21080/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Индикатор RSI строится по EMA, которому нужен расчет по предыдущим значениям. <br />Скорее всего проблема именно в этом.<br />Прогоните цикл для корректного расчета<br />for i=1,ds:Size() do<br />	a=func(i, {Period=12, VType="Typical", round=7}, ds)<br />end <br />
			<i>15.12.2016 11:02:00, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21080/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21080/topic2378/</guid>
			<pubDate>Thu, 15 Dec 2016 11:02:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21079/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте,<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_2iz6j4Du" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a> написал:<br />Спотыкается на строчке внутри индикатора:<br /><br />=============<br />Спотыкается это как?<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_edbkA4NC" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a> написал:<br />DataSource("TQBR","RASP",INTERVAL_M5) &nbsp; <br />=============<br />Что это такое? <br />
			<i>15.12.2016 10:43:23, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21079/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21079/topic2378/</guid>
			<pubDate>Thu, 15 Dec 2016 10:43:23 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вызов RSI</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message21078/topic2378/">Вызов RSI</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br />В базе кодов есть индикатор RSI написанный разработчиками. У меня не получается вызвать его обычным способом. Спотыкается на строчке внутри индикатора:<br />
====code====
<pre>val_Up&#91;I&#93; = (val_Up&#91;I-1&#93; * (P-1) + Up&#91;I&#93;) / P</pre>
=============
Вызываю так:
====code====
<pre>DataSource("TQBR","RASP",INTERVAL_M5)&nbsp;&nbsp;&nbsp;
local num_candles=ds:Size()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
func=RSI()
local a=func(num_candles, {Period=12, VType="Typical", round=7}, ds)</pre>
=============
<br />Вот сам индикатор. Спасибо за подсказки.<br />
====code====
<pre>Settings = {
Name = "*RSI (Relative Strength Index)", 
round = "off",
Period = 14, 
VType = "Close", --Open, High, Low, Close, Volume, Median, Typical, Weighted, Difference
line = {{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "RSI",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE, 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(255, 0, 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}

function Init() 
&nbsp;&nbsp;&nbsp;&nbsp;func = RSI()
&nbsp;&nbsp;&nbsp;&nbsp;return #Settings.line
end

function OnCalculate(Index) 
&nbsp;&nbsp;&nbsp;&nbsp;return func(Index, Settings)
end

function RSI() --Relative Strength I("RSI")
&nbsp;&nbsp;&nbsp;&nbsp;local Up = {}
&nbsp;&nbsp;&nbsp;&nbsp;local Down = {}
&nbsp;&nbsp;&nbsp;&nbsp;local val_Up = {}
&nbsp;&nbsp;&nbsp;&nbsp;local val_Down = {}
return function (I, Fsettings, ds)
local Out = nil
local Fsettings=(Fsettings or {})
local P = (Fsettings.Period or 14)
local VT = (Fsettings.VType or "Close")
local R = (Fsettings.round or "off")
if I == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;Up&#91;I&#93; = 0
&nbsp;&nbsp;&nbsp;&nbsp;Down&#91;I&#93; = 0
end
if I&#62;1 then
&nbsp;&nbsp;&nbsp;&nbsp;local Val = Value(I,VT,ds)
&nbsp;&nbsp;&nbsp;&nbsp;local ValPrev = Value(I-1,VT,ds)
&nbsp;&nbsp;&nbsp;&nbsp;if ValPrev &#60; Val then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Up&#91;I&#93; = Val - ValPrev
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Up&#91;I&#93; = 0
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;if ValPrev &#62; Val then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Down&#91;I&#93; = ValPrev - Val
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Down&#91;I&#93; = 0
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;if (I == P) or (I == P+1) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local sumU = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local sumD = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i = I-P+1, I do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sumU = sumU + Up&#91;i&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sumD = sumD + Down&#91;i&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val_Up&#91;I&#93; = sumU/P
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val_Down&#91;I&#93; = sumD/P
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;if I &#62; P+1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val_Up&#91;I&#93; = (val_Up&#91;I-1&#93; * (P-1) + Up&#91;I&#93;) / P
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val_Down&#91;I&#93; = (val_Down&#91;I-1&#93; * (P-1) + Down&#91;I&#93;) / P
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;if I &#62;= P then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Out = 100 / (1 + (val_Down&#91;I&#93; / val_Up&#91;I&#93;))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return rounding(Out, R)
&nbsp;&nbsp;&nbsp;&nbsp;end
end
end
end

function rounding(num, round) 
if round and string.upper(round)== "ON" then round=0 end
if num and tonumber(round) then
&nbsp;&nbsp;&nbsp;&nbsp;local mult = 10^round
&nbsp;&nbsp;&nbsp;&nbsp;if num &#62;= 0 then return math.floor(num * mult + 0.5) / mult
&nbsp;&nbsp;&nbsp;&nbsp;else return math.ceil(num * mult - 0.5) / mult end
else return num end
end

function Value(I,VType,ds) 
local Out = nil
VType=(VType and string.upper(string.sub(VType,1,1))) or "A"
&nbsp;&nbsp;&nbsp;&nbsp;if VType == "O" then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--Open
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Out = (O and O(I)) or (ds and ds:O(I))
&nbsp;&nbsp;&nbsp;&nbsp;elseif VType == "H" then&nbsp;&nbsp;&nbsp;&nbsp; --High
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Out = (H and H(I)) or (ds and ds:H(I))
&nbsp;&nbsp;&nbsp;&nbsp;elseif VType == "L" then&nbsp;&nbsp;&nbsp;&nbsp;--Low
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Out = (L and L(I)) or (ds and ds:L(I))
&nbsp;&nbsp;&nbsp;&nbsp;elseif VType == "C" then&nbsp;&nbsp;&nbsp;&nbsp;--Close
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Out = (C and C(I)) or (ds and ds:C(I))
&nbsp;&nbsp;&nbsp;&nbsp;elseif VType == "V" then&nbsp;&nbsp;&nbsp;&nbsp;--Volume
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Out = (V and V(I)) or (ds and ds:V(I)) 
&nbsp;&nbsp;&nbsp;&nbsp;elseif VType == "M" then&nbsp;&nbsp;&nbsp;&nbsp;--Median
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Out = ((Value(I,"H",ds) + Value(I,"L",ds)) / 2)
&nbsp;&nbsp;&nbsp;&nbsp;elseif VType == "T" then&nbsp;&nbsp;&nbsp;&nbsp;--Typical
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Out = ((Value(I,"M",ds) * 2 + Value(I,"C",ds))/3)
&nbsp;&nbsp;&nbsp;&nbsp;elseif VType == "W" then&nbsp;&nbsp;&nbsp;&nbsp;--Weighted
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Out = ((Value(I,"T",ds) * 3 + Value(I,"O",ds))/4) 
&nbsp;&nbsp;&nbsp;&nbsp;elseif VType == "D" then&nbsp;&nbsp;&nbsp;&nbsp;--Difference
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Out = (Value(I,"H",ds) - Value(I,"L",ds))
&nbsp;&nbsp;&nbsp;&nbsp;elseif VType == "A" then&nbsp;&nbsp;&nbsp;&nbsp;--Any
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ds then Out = ds&#91;I&#93; else Out = nil end
&nbsp;&nbsp;&nbsp;&nbsp;end
return Out
end</pre>
============= <br />
			<i>15.12.2016 10:40:45, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message21078/topic2378/</link>
			<guid>http://forum.quik.ru/messages/forum10/message21078/topic2378/</guid>
			<pubDate>Thu, 15 Dec 2016 10:40:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
