<?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>Tue, 28 Apr 2026 15:10:52 +0300</pubDate>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27899/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вот это начала правильно?<br />
====code====
<pre>Settings=
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name = "*SMI",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; periodK = 5,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;metodK = "EMA", --(EMA)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;periodD = 3,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;metodK = "EMA", --(EMA)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; line = 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "K",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(222, 0, 0),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Width = 2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name = "D",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(333, 0, 0),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Width = 2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
}
function Init()
 func = smi()
 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

function SMI() --Stochastic Momentum Index ("SMI")
&nbsp;&nbsp; local K_MA=EMA()
&nbsp;&nbsp; local D_MA=EMA()
&nbsp;&nbsp; local H_tmp={}
&nbsp;&nbsp; local L_tmp={}
&nbsp;&nbsp; local it = {p=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local K = (Fsettings.Period or 5)
local MK = (Fsettings.Metod or EMA)
local D = (Fsettings.Period_D or 3)
local MD = (Fsettings.Metod_D or EMA)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</pre>
============= <br />
			<i>26.11.2017 13:26:18, Денис Лихачев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27899/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27899/topic3239/</guid>
			<pubDate>Sun, 26 Nov 2017 13:26:18 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27898/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			====code====
<pre>Settings=
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name = "*SMI",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; periodK = 5,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; metodK = "EMA", --(EMA)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; periodD = 3,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; metodK = "EMA", --(EMA)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; line = 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "K",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(222, 0, 0),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "D",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(333, 0, 0),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
}
function Init()
 func = smi()
 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

function SMI() --Stochastic Momentum Index ("SMI")
&nbsp;&nbsp; local K_MA=EMA()
&nbsp;&nbsp; local D_MA=EMA()
&nbsp;&nbsp; local H_tmp={}
&nbsp;&nbsp; local L_tmp={}
&nbsp;&nbsp; local it = {p=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local K = (Fsettings.Period or 5)
local MK = (Fsettings.Metod or EMA)
local D = (Fsettings.Period_D or 3)
local MD = (Fsettings.Metod_D or EMA)
if (K&#62;0) and (D&#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; end
&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;=K then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local val_h=math.max(unpack(H_tmp))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local val_l=math.min(unpack(L_tmp))
&nbsp;&nbsp;&nbsp;&nbsp;&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;&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;&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

EMA = "EMA"
OPEN,HIGH,LOW,CLOSE,VOLUME,MEDIAN,TYPICAL,WEIGHTED,DIFFERENCE,ANY = "O","H","L","C","V","M","T","W","D","A"

--&#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

function CandleExist(I,ds)
return (type(C)=="function" and C(I)~=nil) or
&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; return math.fmod(I-1,P+1)
end

function ConvertValue(T,...)
local function r(V, R) 
&nbsp;&nbsp; if R and string.upper(R)== "ON" then R=0 end
&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; else return V end
end
&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; 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; else return nil end
end

function GetValueEX(I,VT,ds) 
VT=(VT and string.upper(string.sub(VT,1,1))) or ANY
&nbsp;&nbsp; if VT == OPEN then&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; 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; 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; 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; 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; 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; elseif VT == TYPICAL then&nbsp;&nbsp; --Typical
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3)
&nbsp;&nbsp; elseif VT == WEIGHTED then&nbsp;&nbsp; --Weighted
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4) 
&nbsp;&nbsp; elseif VT == DIFFERENCE then&nbsp;&nbsp; --Difference
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds))
&nbsp;&nbsp; else&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; end
return nil
end
</pre>
============= <br />
			<i>26.11.2017 12:31:54, Денис Лихачев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27898/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27898/topic3239/</guid>
			<pubDate>Sun, 26 Nov 2017 12:31:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27897/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Можете проверить? <br />
			<i>26.11.2017 12:15:39, Денис Лихачев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27897/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27897/topic3239/</guid>
			<pubDate>Sun, 26 Nov 2017 12:15:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27896/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			====code====
<pre>Settings=
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name = "*SMI",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; periodK = 5,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; metodK = "EMA", --(EMA)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; periodD = 3,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; metodK = "EMA", --(EMA)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; line = 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "K",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(222, 0, 0),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "D",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(333, 0, 0),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
}
function Init()
 func = smi()
 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

function SMI() --Stochastic Momentum Index ("SMI")
&nbsp;&nbsp; local K_MA=EMA()
&nbsp;&nbsp; local D_MA=EMA()
&nbsp;&nbsp; local H_tmp={}
&nbsp;&nbsp; local L_tmp={}
&nbsp;&nbsp; local it = {p=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local K = (Fsettings.Period or 5)
local MK = (Fsettings.Metod or EMA)
local D = (Fsettings.Period_D or 3)
local MD = (Fsettings.Metod_D or EMA)
if (K&#62;0) and (D&#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; end
&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;=K then
&nbsp;&nbsp;
 return 100
end
</pre>
============= <br />
			<i>26.11.2017 12:13:38, Денис Лихачев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27896/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27896/topic3239/</guid>
			<pubDate>Sun, 26 Nov 2017 12:13:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27895/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			За мануал Спасибо! <br />
			<i>26.11.2017 10:29:35, Денис Лихачев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27895/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27895/topic3239/</guid>
			<pubDate>Sun, 26 Nov 2017 10:29:35 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27894/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Ренат, не думайте что я лентяй. Из тоса в Амик - сам перевел. С Lua пол ночи просидел:
====code====
<pre>Settings=
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name = "*SMI",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; periodK = 5,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; metodK = "EMA", --(EMA)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; periodD = 3,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; metodK = "EMA", --(EMA)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; line = 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "K",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(222, 0, 0),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "D",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(333, 0, 0),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
}
function Init()
 return 1
end

function OnCalculate(index)


&nbsp;&nbsp;
 return 100
end

</pre>
============= <br />
			<i>26.11.2017 10:28:43, Денис Лихачев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27894/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27894/topic3239/</guid>
			<pubDate>Sun, 26 Nov 2017 10:28:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27893/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://zserge.wordpress.com/2012/02/23/lua-%D0%B7%D0%B0-60-%D0%BC%D0%B8%D0%BD%D1%83%D1%82/" target="_blank" rel="nofollow">за пол часа решите это самостоятельно</a></noindex> <br />
			<i>26.11.2017 09:37:40, rinat.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27893/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27893/topic3239/</guid>
			<pubDate>Sun, 26 Nov 2017 09:37:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27892/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Уважаемые бойцы, кто силён в Lua, подскажите какие строки нужно переписать? <br />
			<i>25.11.2017 20:02:58, Денис Лихачев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27892/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27892/topic3239/</guid>
			<pubDate>Sat, 25 Nov 2017 20:02:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27891/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В оригинале, этот индикатор носит имя: Stochastic Momentum Index, написанный William Blau в 1993 году.<br />Вот код Stochastic Oscillator для Quik написанный на языке Lua:<br />
====code====
<pre>Settings = {
Name = "*SO (Stochastic Oscillator)", 
Period = 5, 
Metod = "SMA", --(SMA)
Shift = 3, 
Period_D = 3, 
Metod_D = "SMA", --(SMA)
line = {{
&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(unpack(H_tmp))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local val_l=math.min(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()}
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,
------------------------------------------------------------------
--&#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

SMA = "SMA"
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
&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

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>25.11.2017 20:01:00, Денис Лихачев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27891/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27891/topic3239/</guid>
			<pubDate>Sat, 25 Nov 2017 20:01:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27890/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вот формула для Amibroker 
====code====
<pre>percentDLength = param("",3,1,10,1);
percentKLength = param("",5,1,10,1);

min_low = llv(low,percentKLength);
max_high = hhv(high, percentDLength);

rel_diff = close - (max_high + min_low)/2;
diff = max_high - min_low;

avgrel = ema(ema(rel_diff, 3), 3);
avgdiff = ema(ema(diff, 3), 3);

smi = iif(avgdif !=0, (avgrel/(avgdiff/2))*100,0);
avgsmi = ema(smi,3);

plot(smi,""32);
plot(avgsmi,"",27);
</pre>
============= <br />
			<i>25.11.2017 18:49:01, Денис Лихачев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27890/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27890/topic3239/</guid>
			<pubDate>Sat, 25 Nov 2017 18:49:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27889/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Текст <br />
			<i>25.11.2017 17:44:43, s_mike@rambler.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27889/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27889/topic3239/</guid>
			<pubDate>Sat, 25 Nov 2017 17:44:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27888/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_4Tyjva8y" href="/user/1769/" bx-tooltip-user-id="1769">Денис Лихачев</a> написал:<br />Уважаемые мастера, кто может расшифровать код написанный в thinkorswim, индикатор: &quot;stochastic momentum index&quot;
====code====
<pre>&nbsp;&nbsp;declare lower;

input over_bought&nbsp;&nbsp;=&nbsp;&nbsp; 40.0 ;
input over_sold&nbsp;&nbsp;=&nbsp;&nbsp; -&nbsp;&nbsp;40.0 ;
input percentDLength&nbsp;&nbsp;=&nbsp;&nbsp; 3 ;
input percentKLength&nbsp;&nbsp;=&nbsp;&nbsp; 5 ;

def min_low&nbsp;&nbsp;=&nbsp;&nbsp;lowest(low, percentKLength);
def max_high&nbsp;&nbsp;=&nbsp;&nbsp;highest(high, percentKLength);
def rel_diff&nbsp;&nbsp;=&nbsp;&nbsp;close&nbsp;&nbsp;-&nbsp;&nbsp;(max_high&nbsp;&nbsp;+&nbsp;&nbsp;min_low)/ 2 ;
def diff&nbsp;&nbsp;=&nbsp;&nbsp;max_high&nbsp;&nbsp;-&nbsp;&nbsp;min_low;

def avgrel&nbsp;&nbsp;=&nbsp;&nbsp;expaverage(expaverage(rel_diff, percentDLength), percentDLength);
def avgdiff&nbsp;&nbsp;=&nbsp;&nbsp;expaverage(expaverage(diff, percentDLength), percentDLength);

plot SMI&nbsp;&nbsp;=&nbsp;&nbsp; if&nbsp;&nbsp;avgdiff&nbsp;&nbsp;!&nbsp;&nbsp;=&nbsp;&nbsp; 0&nbsp;&nbsp; then&nbsp;&nbsp;avgrel / (avgdiff /&nbsp;&nbsp;2 )&nbsp;&nbsp;*&nbsp;&nbsp; 100&nbsp;&nbsp; else&nbsp;&nbsp; 0 ;
 smi.setDefaultColor (getColor( 1 ));

plot AvgSMI&nbsp;&nbsp;=&nbsp;&nbsp;expaverage(smi, percentDLength);
 avgsmi.setDefaultColor (getcolor( 5 ));

plot overbought&nbsp;&nbsp;=&nbsp;&nbsp;over_bought;
 overbought.setDefaultColor (getcolor( 5 ));

plot oversold&nbsp;&nbsp;=&nbsp;&nbsp;over_sold;
 oversold.setDefaultColor (getcolor( 5 ));
&nbsp;&nbsp;</pre>
=============
Нужно преобразовать его в кодировке LUA<br />=============<br />это всего лишь набор вызовов к встроенным функциям tos и настройка параметров индикатора.<br /><br />для написания версии индикатора для Квик этот тест бесполезен. <br />
			<i>25.11.2017 17:44:15, s_mike@rambler.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27888/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27888/topic3239/</guid>
			<pubDate>Sat, 25 Nov 2017 17:44:15 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Мастер LUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27886/topic3239/">Мастер LUA</a></b> <i>Помощь в переписи индикатора из thinkorswim в LUA</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Уважаемые мастера, кто может расшифровать код написанный в thinkorswim, индикатор: &quot;stochastic momentum index&quot;
====code====
<pre>declare lower;

input over_bought = 40.0;
input over_sold = -40.0;
input percentDLength = 3;
input percentKLength = 5;

def min_low = lowest(low, percentKLength);
def max_high = highest(high, percentKLength);
def rel_diff = close - (max_high + min_low)/2;
def diff = max_high - min_low;

def avgrel = expaverage(expaverage(rel_diff, percentDLength), percentDLength);
def avgdiff = expaverage(expaverage(diff, percentDLength), percentDLength);

plot SMI = if avgdiff != 0 then avgrel / (avgdiff / 2) * 100 else 0;
smi.setDefaultColor(getColor(1));

plot AvgSMI = expaverage(smi, percentDLength);
avgsmi.setDefaultColor(getcolor(5));

plot overbought = over_bought;
overbought.setDefaultColor(getcolor(5));

plot oversold = over_sold;
oversold.setDefaultColor(getcolor(5));
</pre>
=============
Нужно преобразовать его в кодировке LUA <br />
			<i>25.11.2017 17:28:26, Денис Лихачев.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27886/topic3239/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27886/topic3239/</guid>
			<pubDate>Sat, 25 Nov 2017 17:28:26 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
