<?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:28:11 +0300</pubDate>
		<item>
			<title>Ввод собственных данных в виде индикатора в квик</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message66797/topic7743/">Ввод собственных данных в виде индикатора в квик</a></b> <i>индикатор для квик</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вот тут посмотри <noindex><a href="https://quikluacsharp.ru/qlua-osnovy/peremennye-massivy-i-funkcii-v-qlua-lua/" target="_blank" rel="nofollow">https://quikluacsharp.ru/qlua-osnovy/peremennye-massivy-i-funkcii-v-qlua-lua/</a></noindex> <br />
			<i>14.11.2022 21:16:50, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message66797/topic7743/</link>
			<guid>http://forum.quik.ru/messages/forum10/message66797/topic7743/</guid>
			<pubDate>Mon, 14 Nov 2022 21:16:50 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ввод собственных данных в виде индикатора в квик</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message66788/topic7743/">Ввод собственных данных в виде индикатора в квик</a></b> <i>индикатор для квик</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			1) Начните с учебника по программированию на луа.<br />Для освоения Lua возьмите редактор текста SciTe.<br />В нем встроен отладчик и возможность запуска скиптов луа.<br />------------------------<br />2) Напишите свой алгоритм в редакторе и исполните его. <br />------------------------<br />3) изучите описание библиотеки QLUA и перепишите свой скрипт с учетом функций библиотеки. <br />
			<i>14.11.2022 16:22:11, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message66788/topic7743/</link>
			<guid>http://forum.quik.ru/messages/forum10/message66788/topic7743/</guid>
			<pubDate>Mon, 14 Nov 2022 16:22:11 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ввод собственных данных в виде индикатора в квик</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message66787/topic7743/">Ввод собственных данных в виде индикатора в квик</a></b> <i>индикатор для квик</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_R50n0X6h" href="/user/14481/" bx-tooltip-user-id="14481">Евгений</a> написал:<br /> &nbsp; &nbsp; Скрытый текст &nbsp; &nbsp; &nbsp; Settings = {<br />Name = &quot;*MACDH (Moving Average Convergence/Divergence Histogram)&quot;, <br />SHORT_Period = 12, <br />LONG_Period = 26, <br />Metod = &quot;EMA&quot;, --SMA, EMA, VMA, SMMA, VMA<br />VType = &quot;Close&quot;, --Open, High, Low, Close, Volume, Median, Typical, Weighted, Difference<br />Signal_Metod = &quot;SMA&quot;, --SMA, EMA, VMA, SMMA, VMA<br />Signal_Period = 9, <br />Percent=1,<br />line = {{<br /> &nbsp; &nbsp; &nbsp; &nbsp;Name = &quot;Horizontal line&quot;,<br /> &nbsp; &nbsp; &nbsp; &nbsp;Type = TYPE_LINE, <br /> &nbsp; &nbsp; &nbsp; &nbsp;Color = RGB(140, 140, 140)<br /> &nbsp; &nbsp; &nbsp; &nbsp;},<br /> &nbsp; &nbsp; &nbsp; &nbsp;{<br /> &nbsp; &nbsp; &nbsp; &nbsp;Width = 3,<br /> &nbsp; &nbsp; &nbsp; &nbsp;Name = &quot;MACDH_Up&quot;,<br /> &nbsp; &nbsp; &nbsp; &nbsp;Type = TYPE_HISTOGRAM, <br /> &nbsp; &nbsp; &nbsp; &nbsp;Color = RGB(0, 206, 0)<br /> &nbsp; &nbsp; &nbsp; &nbsp;},<br /> &nbsp; &nbsp; &nbsp; &nbsp;{<br /> &nbsp; &nbsp; &nbsp; &nbsp;Width = 3,<br /> &nbsp; &nbsp; &nbsp; &nbsp;Name = &quot;MACDH_Down&quot;,<br /> &nbsp; &nbsp; &nbsp; &nbsp;Type = TYPE_HISTOGRAM, <br /> &nbsp; &nbsp; &nbsp; &nbsp;Color = RGB(221, 44, 44)<br /> &nbsp; &nbsp; &nbsp; &nbsp;},<br /> &nbsp; &nbsp; &nbsp; &nbsp;{<br /> &nbsp; &nbsp; &nbsp; &nbsp;Name = &quot;MACDH - Signal&quot;, <br /> &nbsp; &nbsp; &nbsp; &nbsp;Type = TYPE_LINE, <br /> &nbsp; &nbsp; &nbsp; &nbsp;Color = RGB(255, 255, 255)<br /> &nbsp; &nbsp; &nbsp; &nbsp;}<br /> &nbsp; &nbsp; &nbsp; &nbsp;},<br />Round = &quot;off&quot;,<br />Multiply = 1,<br />Horizontal_line=&quot;0&quot;<br />}<br /><br />function Init()<br /> &nbsp; &nbsp;func = MACDH()<br /> &nbsp; &nbsp;return #Settings.line<br />end<br /><br />function OnCalculate(Index)<br />local Out1,Out2 = ConvertValue(Settings,func(Index, Settings))<br />local HL = tonumber(Settings.Horizontal_line)<br /> &nbsp; &nbsp;if Out1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if Out1 &gt; (HL or 0) then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return HL,Out1,nil,Out2<br /> &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return HL,nil,Out1,Out2<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp;return HL,nil,nil,nil<br /> &nbsp; &nbsp;end<br />end<br /><br />function MACDH() --MACD Histogram (&quot;MACDH&quot;)<br /> &nbsp; &nbsp;local MACDH_MACD = MACD()<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function (I, Fsettings, ds)<br />local Fsettings=(Fsettings or {})<br />local ShortP = (Fsettings.SHORT_Period or 12)<br />local LongP = (Fsettings.LONG_Period or 26)<br />local M = (Fsettings.Metod or EMA) <br />local VT = (Fsettings.VType or CLOSE) <br />local SM = (Fsettings.Signal_Metod or SMA) <br />local SP = (Fsettings.Signal_Period or 9)<br />local Percent = (Fsettings.Percent or 1)<br />if (ShortP&gt;0) and (LongP&gt;0) and (SP&gt;0) then <br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;local Out, Signal = MACDH_MACD(I, {SHORT_Period=ShortP, LONG_Period=LongP, Metod=M,VType=VT, Signal_Metod=SM, Signal_Period=SP, Percent=Percent}, ds)<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; it={p=I, l=it.l+1}<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if Out and Signal then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Out-Signal, Signal<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />end<br />return nil<br />end<br />end<br /><br />function MACD() --Moving Average Convergence/Divergence (&quot;MACD&quot;)<br /> &nbsp; &nbsp;local MACD_MA = MA()<br /> &nbsp; &nbsp;local Short_MA = MA()<br /> &nbsp; &nbsp;local Long_MA = MA()<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function (I, Fsettings, ds)<br />local Fsettings=(Fsettings or {})<br />local ShortP = (Fsettings.SHORT_Period or 12)<br />local LongP = (Fsettings.LONG_Period or 26)<br />local M = (Fsettings.Metod or EMA)<br />local VT = (Fsettings.VType or CLOSE)<br />local SM = (Fsettings.Signal_Metod or SMA)<br />local SP = (Fsettings.Signal_Period or 9)<br />local Percent = (Fsettings.Percent or 1)<br />if (ShortP&gt;0) and (LongP&gt;0) and (SP&gt;0) then <br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;local So = Short_MA(I, {Period=ShortP, Metod = M, VType=VT}, ds)<br /> &nbsp; &nbsp;local Lo = Long_MA(I, {Period=LongP, Metod = M, VType=VT}, ds)<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then it={p=I, l=it.l+1} end<br /> &nbsp; &nbsp; &nbsp; &nbsp;local i = it.l - math.max(ShortP, LongP) + 1<br /> &nbsp; &nbsp; &nbsp; &nbsp;if (i&gt;0) then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Percent==0 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;t_MACD=So - Lo<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;t_MACD=100*(So - Lo) / Lo<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (SM~=SMA) and (SM~=EMA) then SM=SMA end<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return t_MACD, MACD_MA(i, {Period=SP, Metod = SM, VType=ANY}, {<I> = t_MACD})<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />end<br />return nil, nil<br />end<br />end<br /><br />function MA() --Moving Average (&quot;MA&quot;)<br /> &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()}<br />return function (I, Fsettings, ds)<br /> &nbsp; &nbsp;local Fsettings=(Fsettings or {})<br /> &nbsp; &nbsp;local P = (Fsettings.Period or 14)<br /> &nbsp; &nbsp;if (P &gt; 0) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;return T_MA&#91;string.upper(Fsettings.Metod or EMA)&#93;(I, P, (Fsettings.VType or CLOSE), ds)<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />------------------------------------------------------------------<br />----Moving Average SMA, MMA, EMA, WMA, SMMA, VMA<br />------------------------------------------------------------------<br />--&#91;&#91;Simple Moving Average (SMA)<br />SMA = sum(Pi) / n&#93;&#93;<br />function F_SMA()<br /> &nbsp; &nbsp;local sum = {}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function (I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then it={p=I, l=it.l+1} end<br /> &nbsp; &nbsp; &nbsp; &nbsp;local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum&#91;Ip&#93; = (sum&#91;Ipp&#93; or 0) + GetValueEX(it.p,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) / P<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />--&#91;&#91;Modified Moving Average (MMA)<br />MMA = (MMAi-1*(n-1) + Pi) / n&#93;&#93;<br />function F_MMA() <br /> &nbsp; &nbsp;local sum = {}<br /> &nbsp; &nbsp;local tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function(I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;it = {p=I, l=it.l+1} <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.pp = tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &lt;= P + 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sum&#91;Ip&#93; = (sum&#91;Ipp&#93; or 0) + GetValueEX(it.p,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (it.l == P) or (it.l == P + 1) then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = (sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) / P<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = (tmp.pp*(P-1) + GetValueEX(it.p,VT,ds)) / P<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />--&#91;&#91;Exponential Moving Average (EMA)<br />EMAi = (EMAi-1*(n-1)+2*Pi) / (n+1)&#93;&#93;<br />function F_EMA() <br /> &nbsp; &nbsp;local tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function(I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;it = {p=I, l=it.l+1} <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.pp = tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = GetValueEX(it.p,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = (tmp.pp*(P-1) + 2*GetValueEX(it.p,VT,ds)) / (P+1)<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />--&#91;&#91;<br />William Moving Average (WMA)<br />( Previous WILLMA * ( Period - 1 ) + Data ) / Period&#93;&#93;<br />function F_WMA()<br /> &nbsp; &nbsp;local tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function(I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;it={p=I, l=it.l+1}<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.pp = tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = GetValueEX(it.p,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = (tmp.pp * (P-1) + GetValueEX(it.p,VT,ds)) / P<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />--&#91;&#91;Volume Adjusted Moving Average (VMA)<br />VMA = sum(Pi*Vi) / sum(Vi)&#93;&#93;<br />function F_VMA()<br /> &nbsp; &nbsp;local sum = {}<br /> &nbsp; &nbsp;local sum2 = {}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function(I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum2 = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then it={p=I, l=it.l+1} end<br /> &nbsp; &nbsp; &nbsp; &nbsp;local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum&#91;Ip&#93; = (sum&#91;Ipp&#93; or 0) + GetValueEX(it.p,VT,ds) * GetValueEX(it.p,VOLUME,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum2&#91;Ip&#93; = (sum2&#91;Ipp&#93; or 0) + GetValueEX(it.p,VOLUME,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &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))<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />--&#91;&#91;Smoothed Moving Average (SMMA)<br />SMMAi = (sum(Pi) - SMMAi-1 + Pi) / n&#93;&#93;<br />function F_SMMA()<br /> &nbsp; &nbsp;local sum = {}<br /> &nbsp; &nbsp;local sum2 = {}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function(I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum2 = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then it={p=I, l=it.l+1} end<br /> &nbsp; &nbsp; &nbsp; &nbsp;local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum&#91;Ip&#93; = (sum&#91;Ipp&#93; or 0) + GetValueEX(it.p,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if it.l == P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sum2&#91;Ip&#93; = (sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) / P<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &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<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return sum2&#91;Ip&#93;<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br /><br />SMA,MMA,EMA,WMA,SMMA,VMA = &quot;SMA&quot;,&quot;MMA&quot;,&quot;EMA&quot;,&quot;WMA&quot;,&quot;SMMA&quot;,&quot;VMA&quot;<br />OPEN,HIGH,LOW,CLOSE,VOLUME,MEDIAN,TYPICAL,WEIGHTED,DIFFERENCE,ANY = &quot;O&quot;,&quot;H&quot;,&quot;L&quot;,&quot;C&quot;,&quot;V&quot;,&quot;M&quot;,&quot;T&quot;,&quot;W&quot;,&quot;D&quot;,&quot;A&quot;<br /><br />function CandleExist(I,ds)<br />return (type©==&quot;function&quot; and C(I)~=nil) or<br /> &nbsp; &nbsp;(type(ds)==&quot;table&quot; and (ds<I>~=nil or (type(ds.Size)==&quot;function&quot; and (I&gt;0) and (I&lt;=ds:Size()))))<br />end<br /><br />function Squeeze(I,P)<br /> &nbsp; &nbsp;return math.fmod(I-1,P+1)<br />end<br /><br />function ConvertValue(T,...)<br />local function r(V, R) <br /> &nbsp; &nbsp;if R and string.upper®== &quot;ON&quot; then R=0 end<br /> &nbsp; &nbsp;if V and tonumber® then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if V &gt;= 0 then return math.floor(V * 10^R + 0.5) / 10^R<br /> &nbsp; &nbsp; &nbsp; &nbsp;else return math.ceil(V * 10^R - 0.5) / 10^R end<br /> &nbsp; &nbsp;else return V end<br />end<br />local arg = {...}<br />arg.n = select(&#39;#&#39;, ...)<br /> &nbsp; &nbsp;if arg.n &gt; 0 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;for i = 1, arg.n do<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;arg<I>=arg<I> and r(arg<I> * ((T and T.Multiply) or 1), (T and T.Round) or &quot;off&quot;)<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;return unpack(arg)<br /> &nbsp; &nbsp;else return nil end<br />end<br /><br />function GetValueEX(I,VT,ds) <br />VT=(VT and string.upper(string.sub(VT,1,1))) or ANY<br /> &nbsp; &nbsp;if VT == OPEN then &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--Open<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (O and O(I)) or (ds and ds:O(I))<br /> &nbsp; &nbsp;elseif VT == HIGH then &nbsp; &nbsp; &nbsp; &nbsp; --High<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (H and H(I)) or (ds and ds:H(I))<br /> &nbsp; &nbsp;elseif VT == LOW then &nbsp; &nbsp; &nbsp; &nbsp;--Low<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (L and L(I)) or (ds and ds:L(I))<br /> &nbsp; &nbsp;elseif VT == CLOSE then &nbsp; &nbsp; &nbsp; &nbsp;--Close<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (C and C(I)) or (ds and ds:C(I))<br /> &nbsp; &nbsp;elseif VT == VOLUME then &nbsp; &nbsp; &nbsp; &nbsp;--Volume<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (V and V(I)) or (ds and ds:V(I)) <br /> &nbsp; &nbsp;elseif VT == MEDIAN then &nbsp; &nbsp; &nbsp; &nbsp;--Median<br /> &nbsp; &nbsp; &nbsp; &nbsp;return ((GetValueEX(I,HIGH,ds) + GetValueEX(I,LOW,ds)) / 2)<br /> &nbsp; &nbsp;elseif VT == TYPICAL then &nbsp; &nbsp;--Typical<br /> &nbsp; &nbsp; &nbsp; &nbsp;return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3)<br /> &nbsp; &nbsp;elseif VT == WEIGHTED then &nbsp; &nbsp;--Weighted<br /> &nbsp; &nbsp; &nbsp; &nbsp;return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4) <br /> &nbsp; &nbsp;elseif VT == DIFFERENCE then &nbsp; &nbsp;--Difference<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds))<br /> &nbsp; &nbsp;else &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--Any<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (ds and ds<I>)<br /> &nbsp; &nbsp;end<br />return nil<br />end <br />Используй TYPE_HISTOGRAM в настройках линий, ну и естественно вместо функций MACD &nbsp;MA добывь свои, если нет опыта в программировании закажи или изучай, других вариантов вроде нет</I></I></I></I></I></I><br />=============<br />Вот я и хотел изучать, только не пойму с чего начать. Это рабочий индикатор какой то? Смотрю на это и ума не приложу куда тут вставлять значения. А если заказывать не подскажешь сколько это может стоить? <br />
			<i>14.11.2022 16:06:38, alexey.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message66787/topic7743/</link>
			<guid>http://forum.quik.ru/messages/forum10/message66787/topic7743/</guid>
			<pubDate>Mon, 14 Nov 2022 16:06:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ввод собственных данных в виде индикатора в квик</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message66784/topic7743/">Ввод собственных данных в виде индикатора в квик</a></b> <i>индикатор для квик</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<table class="forum-spoiler"><thead onclick="if (this.nextSibling.style.display=='none') { this.nextSibling.style.display=''; BX.addClass(this, 'forum-spoiler-head-open'); } else { this.nextSibling.style.display='none'; BX.removeClass(this, 'forum-spoiler-head-open'); } BX.onCustomEvent('BX.Forum.Spoiler:toggle', [{node: this}]); event.stopPropagation();"><tr><th><div>Скрытый текст</div></th></tr></thead><tbody class="forum-spoiler" style="display:none;"><tr><td>Settings = {<br />Name = &quot;*MACDH (Moving Average Convergence/Divergence Histogram)&quot;, <br />SHORT_Period = 12, <br />LONG_Period = 26, <br />Metod = &quot;EMA&quot;, --SMA, EMA, VMA, SMMA, VMA<br />VType = &quot;Close&quot;, --Open, High, Low, Close, Volume, Median, Typical, Weighted, Difference<br />Signal_Metod = &quot;SMA&quot;, --SMA, EMA, VMA, SMMA, VMA<br />Signal_Period = 9, <br />Percent=1,<br />line = {{<br /> &nbsp; &nbsp; &nbsp; &nbsp;Name = &quot;Horizontal line&quot;,<br /> &nbsp; &nbsp; &nbsp; &nbsp;Type = TYPE_LINE, <br /> &nbsp; &nbsp; &nbsp; &nbsp;Color = RGB(140, 140, 140)<br /> &nbsp; &nbsp; &nbsp; &nbsp;},<br /> &nbsp; &nbsp; &nbsp; &nbsp;{<br /> &nbsp; &nbsp; &nbsp; &nbsp;Width = 3,<br /> &nbsp; &nbsp; &nbsp; &nbsp;Name = &quot;MACDH_Up&quot;,<br /> &nbsp; &nbsp; &nbsp; &nbsp;Type = TYPE_HISTOGRAM, <br /> &nbsp; &nbsp; &nbsp; &nbsp;Color = RGB(0, 206, 0)<br /> &nbsp; &nbsp; &nbsp; &nbsp;},<br /> &nbsp; &nbsp; &nbsp; &nbsp;{<br /> &nbsp; &nbsp; &nbsp; &nbsp;Width = 3,<br /> &nbsp; &nbsp; &nbsp; &nbsp;Name = &quot;MACDH_Down&quot;,<br /> &nbsp; &nbsp; &nbsp; &nbsp;Type = TYPE_HISTOGRAM, <br /> &nbsp; &nbsp; &nbsp; &nbsp;Color = RGB(221, 44, 44)<br /> &nbsp; &nbsp; &nbsp; &nbsp;},<br /> &nbsp; &nbsp; &nbsp; &nbsp;{<br /> &nbsp; &nbsp; &nbsp; &nbsp;Name = &quot;MACDH - Signal&quot;, <br /> &nbsp; &nbsp; &nbsp; &nbsp;Type = TYPE_LINE, <br /> &nbsp; &nbsp; &nbsp; &nbsp;Color = RGB(255, 255, 255)<br /> &nbsp; &nbsp; &nbsp; &nbsp;}<br /> &nbsp; &nbsp; &nbsp; &nbsp;},<br />Round = &quot;off&quot;,<br />Multiply = 1,<br />Horizontal_line=&quot;0&quot;<br />}<br /><br />function Init()<br /> &nbsp; &nbsp;func = MACDH()<br /> &nbsp; &nbsp;return #Settings.line<br />end<br /><br />function OnCalculate(Index)<br />local Out1,Out2 = ConvertValue(Settings,func(Index, Settings))<br />local HL = tonumber(Settings.Horizontal_line)<br /> &nbsp; &nbsp;if Out1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if Out1 &gt; (HL or 0) then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return HL,Out1,nil,Out2<br /> &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return HL,nil,Out1,Out2<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp;return HL,nil,nil,nil<br /> &nbsp; &nbsp;end<br />end<br /><br />function MACDH() --MACD Histogram (&quot;MACDH&quot;)<br /> &nbsp; &nbsp;local MACDH_MACD = MACD()<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function (I, Fsettings, ds)<br />local Fsettings=(Fsettings or {})<br />local ShortP = (Fsettings.SHORT_Period or 12)<br />local LongP = (Fsettings.LONG_Period or 26)<br />local M = (Fsettings.Metod or EMA) <br />local VT = (Fsettings.VType or CLOSE) <br />local SM = (Fsettings.Signal_Metod or SMA) <br />local SP = (Fsettings.Signal_Period or 9)<br />local Percent = (Fsettings.Percent or 1)<br />if (ShortP&gt;0) and (LongP&gt;0) and (SP&gt;0) then <br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;local Out, Signal = MACDH_MACD(I, {SHORT_Period=ShortP, LONG_Period=LongP, Metod=M,VType=VT, Signal_Metod=SM, Signal_Period=SP, Percent=Percent}, ds)<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; it={p=I, l=it.l+1}<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if Out and Signal then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Out-Signal, Signal<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />end<br />return nil<br />end<br />end<br /><br />function MACD() --Moving Average Convergence/Divergence (&quot;MACD&quot;)<br /> &nbsp; &nbsp;local MACD_MA = MA()<br /> &nbsp; &nbsp;local Short_MA = MA()<br /> &nbsp; &nbsp;local Long_MA = MA()<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function (I, Fsettings, ds)<br />local Fsettings=(Fsettings or {})<br />local ShortP = (Fsettings.SHORT_Period or 12)<br />local LongP = (Fsettings.LONG_Period or 26)<br />local M = (Fsettings.Metod or EMA)<br />local VT = (Fsettings.VType or CLOSE)<br />local SM = (Fsettings.Signal_Metod or SMA)<br />local SP = (Fsettings.Signal_Period or 9)<br />local Percent = (Fsettings.Percent or 1)<br />if (ShortP&gt;0) and (LongP&gt;0) and (SP&gt;0) then <br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;local So = Short_MA(I, {Period=ShortP, Metod = M, VType=VT}, ds)<br /> &nbsp; &nbsp;local Lo = Long_MA(I, {Period=LongP, Metod = M, VType=VT}, ds)<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then it={p=I, l=it.l+1} end<br /> &nbsp; &nbsp; &nbsp; &nbsp;local i = it.l - math.max(ShortP, LongP) + 1<br /> &nbsp; &nbsp; &nbsp; &nbsp;if (i&gt;0) then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Percent==0 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;t_MACD=So - Lo<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;t_MACD=100*(So - Lo) / Lo<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (SM~=SMA) and (SM~=EMA) then SM=SMA end<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return t_MACD, MACD_MA(i, {Period=SP, Metod = SM, VType=ANY}, {&#91;i&#93; = t_MACD})<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />end<br />return nil, nil<br />end<br />end<br /><br />function MA() --Moving Average (&quot;MA&quot;)<br /> &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()}<br />return function (I, Fsettings, ds)<br /> &nbsp; &nbsp;local Fsettings=(Fsettings or {})<br /> &nbsp; &nbsp;local P = (Fsettings.Period or 14)<br /> &nbsp; &nbsp;if (P &gt; 0) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;return T_MA&#91;string.upper(Fsettings.Metod or EMA)&#93;(I, P, (Fsettings.VType or CLOSE), ds)<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />------------------------------------------------------------------<br />----Moving Average SMA, MMA, EMA, WMA, SMMA, VMA<br />------------------------------------------------------------------<br />--&#91;&#91;Simple Moving Average (SMA)<br />SMA = sum(Pi) / n&#93;&#93;<br />function F_SMA()<br /> &nbsp; &nbsp;local sum = {}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function (I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then it={p=I, l=it.l+1} end<br /> &nbsp; &nbsp; &nbsp; &nbsp;local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum&#91;Ip&#93; = (sum&#91;Ipp&#93; or 0) + GetValueEX(it.p,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) / P<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />--&#91;&#91;Modified Moving Average (MMA)<br />MMA = (MMAi-1*(n-1) + Pi) / n&#93;&#93;<br />function F_MMA() <br /> &nbsp; &nbsp;local sum = {}<br /> &nbsp; &nbsp;local tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function(I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;it = {p=I, l=it.l+1} <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.pp = tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &lt;= P + 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sum&#91;Ip&#93; = (sum&#91;Ipp&#93; or 0) + GetValueEX(it.p,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (it.l == P) or (it.l == P + 1) then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = (sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) / P<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = (tmp.pp*(P-1) + GetValueEX(it.p,VT,ds)) / P<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />--&#91;&#91;Exponential Moving Average (EMA)<br />EMAi = (EMAi-1*(n-1)+2*Pi) / (n+1)&#93;&#93;<br />function F_EMA() <br /> &nbsp; &nbsp;local tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function(I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;it = {p=I, l=it.l+1} <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.pp = tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = GetValueEX(it.p,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = (tmp.pp*(P-1) + 2*GetValueEX(it.p,VT,ds)) / (P+1)<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />--&#91;&#91;<br />William Moving Average (WMA)<br />( Previous WILLMA * ( Period - 1 ) + Data ) / Period&#93;&#93;<br />function F_WMA()<br /> &nbsp; &nbsp;local tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function(I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;tmp = {pp=nil, p=nil}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;it={p=I, l=it.l+1}<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.pp = tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = GetValueEX(it.p,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp.p = (tmp.pp * (P-1) + GetValueEX(it.p,VT,ds)) / P<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return tmp.p<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />--&#91;&#91;Volume Adjusted Moving Average (VMA)<br />VMA = sum(Pi*Vi) / sum(Vi)&#93;&#93;<br />function F_VMA()<br /> &nbsp; &nbsp;local sum = {}<br /> &nbsp; &nbsp;local sum2 = {}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function(I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum2 = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then it={p=I, l=it.l+1} end<br /> &nbsp; &nbsp; &nbsp; &nbsp;local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum&#91;Ip&#93; = (sum&#91;Ipp&#93; or 0) + GetValueEX(it.p,VT,ds) * GetValueEX(it.p,VOLUME,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum2&#91;Ip&#93; = (sum2&#91;Ipp&#93; or 0) + GetValueEX(it.p,VOLUME,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &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))<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br />--&#91;&#91;Smoothed Moving Average (SMMA)<br />SMMAi = (sum(Pi) - SMMAi-1 + Pi) / n&#93;&#93;<br />function F_SMMA()<br /> &nbsp; &nbsp;local sum = {}<br /> &nbsp; &nbsp;local sum2 = {}<br /> &nbsp; &nbsp;local it = {p=0, l=0}<br />return function(I, P, VT, ds)<br /> &nbsp; &nbsp;if I == 1 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum2 = {}<br /> &nbsp; &nbsp; &nbsp; &nbsp;it = {p=0, l=0}<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;if CandleExist(I,ds) then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if I~=it.p then it={p=I, l=it.l+1} end<br /> &nbsp; &nbsp; &nbsp; &nbsp;local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)<br /> &nbsp; &nbsp; &nbsp; &nbsp;sum&#91;Ip&#93; = (sum&#91;Ipp&#93; or 0) + GetValueEX(it.p,VT,ds)<br /> &nbsp; &nbsp; &nbsp; &nbsp;if it.l &gt;= P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if it.l == P then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sum2&#91;Ip&#93; = (sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) / P<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br /> &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<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return sum2&#91;Ip&#93;<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp;end<br />return nil<br />end<br />end<br /><br /><br />SMA,MMA,EMA,WMA,SMMA,VMA = &quot;SMA&quot;,&quot;MMA&quot;,&quot;EMA&quot;,&quot;WMA&quot;,&quot;SMMA&quot;,&quot;VMA&quot;<br />OPEN,HIGH,LOW,CLOSE,VOLUME,MEDIAN,TYPICAL,WEIGHTED,DIFFERENCE,ANY = &quot;O&quot;,&quot;H&quot;,&quot;L&quot;,&quot;C&quot;,&quot;V&quot;,&quot;M&quot;,&quot;T&quot;,&quot;W&quot;,&quot;D&quot;,&quot;A&quot;<br /><br />function CandleExist(I,ds)<br />return (type&#169;==&quot;function&quot; and C(I)~=nil) or<br /> &nbsp; &nbsp;(type(ds)==&quot;table&quot; and (ds&#91;I&#93;~=nil or (type(ds.Size)==&quot;function&quot; and (I&gt;0) and (I&lt;=ds:Size()))))<br />end<br /><br />function Squeeze(I,P)<br /> &nbsp; &nbsp;return math.fmod(I-1,P+1)<br />end<br /><br />function ConvertValue(T,...)<br />local function r(V, R) <br /> &nbsp; &nbsp;if R and string.upper&#174;== &quot;ON&quot; then R=0 end<br /> &nbsp; &nbsp;if V and tonumber&#174; then<br /> &nbsp; &nbsp; &nbsp; &nbsp;if V &gt;= 0 then return math.floor(V * 10^R + 0.5) / 10^R<br /> &nbsp; &nbsp; &nbsp; &nbsp;else return math.ceil(V * 10^R - 0.5) / 10^R end<br /> &nbsp; &nbsp;else return V end<br />end<br />local arg = {...}<br />arg.n = select(&#39;#&#39;, ...)<br /> &nbsp; &nbsp;if arg.n &gt; 0 then<br /> &nbsp; &nbsp; &nbsp; &nbsp;for i = 1, arg.n do<br /> &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 &quot;off&quot;)<br /> &nbsp; &nbsp; &nbsp; &nbsp;end<br /> &nbsp; &nbsp; &nbsp; &nbsp;return unpack(arg)<br /> &nbsp; &nbsp;else return nil end<br />end<br /><br />function GetValueEX(I,VT,ds) <br />VT=(VT and string.upper(string.sub(VT,1,1))) or ANY<br /> &nbsp; &nbsp;if VT == OPEN then &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--Open<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (O and O(I)) or (ds and ds:O(I))<br /> &nbsp; &nbsp;elseif VT == HIGH then &nbsp; &nbsp; &nbsp; &nbsp; --High<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (H and H(I)) or (ds and ds:H(I))<br /> &nbsp; &nbsp;elseif VT == LOW then &nbsp; &nbsp; &nbsp; &nbsp;--Low<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (L and L(I)) or (ds and ds:L(I))<br /> &nbsp; &nbsp;elseif VT == CLOSE then &nbsp; &nbsp; &nbsp; &nbsp;--Close<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (C and C(I)) or (ds and ds:C(I))<br /> &nbsp; &nbsp;elseif VT == VOLUME then &nbsp; &nbsp; &nbsp; &nbsp;--Volume<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (V and V(I)) or (ds and ds:V(I)) <br /> &nbsp; &nbsp;elseif VT == MEDIAN then &nbsp; &nbsp; &nbsp; &nbsp;--Median<br /> &nbsp; &nbsp; &nbsp; &nbsp;return ((GetValueEX(I,HIGH,ds) + GetValueEX(I,LOW,ds)) / 2)<br /> &nbsp; &nbsp;elseif VT == TYPICAL then &nbsp; &nbsp;--Typical<br /> &nbsp; &nbsp; &nbsp; &nbsp;return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3)<br /> &nbsp; &nbsp;elseif VT == WEIGHTED then &nbsp; &nbsp;--Weighted<br /> &nbsp; &nbsp; &nbsp; &nbsp;return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4) <br /> &nbsp; &nbsp;elseif VT == DIFFERENCE then &nbsp; &nbsp;--Difference<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds))<br /> &nbsp; &nbsp;else &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--Any<br /> &nbsp; &nbsp; &nbsp; &nbsp;return (ds and ds&#91;I&#93;)<br /> &nbsp; &nbsp;end<br />return nil<br />end </td></tr></tbody></table><br />Используй TYPE_HISTOGRAM в настройках линий, ну и естественно вместо функций MACD &nbsp;MA добывь свои, если нет опыта в программировании закажи или изучай, других вариантов вроде нет <br />
			<i>14.11.2022 15:37:21, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message66784/topic7743/</link>
			<guid>http://forum.quik.ru/messages/forum10/message66784/topic7743/</guid>
			<pubDate>Mon, 14 Nov 2022 15:37:21 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ввод собственных данных в виде индикатора в квик</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message66778/topic7743/">Ввод собственных данных в виде индикатора в квик</a></b> <i>индикатор для квик</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день, подскажите как можно реализовать аналог индикатора объема но только с собственными данными. Допустим есть определенные данные за день разбитые поминутно их нужно перенести в квик в виде гистограммы по времени, то есть получится что то вроде обычного индикатора объема только со своими значениями, и если изменять таймфрейм инструмента данный индикатор будет соответственно перестраиваться. Опыта програмирования нет но могу попробовать повторить по образу подобию чего либо, прошу помощи с чего начать? <br />
			<i>14.11.2022 14:32:30, alexey.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message66778/topic7743/</link>
			<guid>http://forum.quik.ru/messages/forum10/message66778/topic7743/</guid>
			<pubDate>Mon, 14 Nov 2022 14:32:30 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
