<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Обработка тиков по интервалу количества]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=325&amp;type=atom" />
	<updated>2020-07-31T20:53:36Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=325</id>
		<entry>
			<title type="html"><![CDATA[Re: Обработка тиков по интервалу количества]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2816#p2816" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>MetalHeart пишет:</cite><blockquote><p>А вот про ограничение &quot;1000 тиков ограничение, если по 200 тиков, то 4 точки будет показывать&quot; вообще ничего не понял, не объясните?</p></blockquote></div><p>Здравствуйте, вы хотите интервал в 200 тиков, 1 тик = 1 бар {open,high,low,close,datetime}все цены равны.<br />В настройках графика стоит ограничение в 1000 баров, у вас 1 бар = 200 тиков 1000/200 = 5 баров, т.к. тики шустро обновляются на графике, то вы будете видеть только 4 ваших бара, которые связаны какой-то линией.<br />В примере в качестве источника тиков - таблица обезличенных сделок.<br />Используя lua_share [url]https://quik2dde.ru/viewtopic.php?id=306,[/url] а именно пространство имен &#039;queues&#039; можно создать очередь ваших баров для индикатора, который при каждом вызове OnCalculate будет разгружать очередь, искать соответствие по datetime на истории тиков и устанавливать нужное значение на график из вашего бара<br /></p><div class="codebox"><pre><code>--local sh = require&#039;lua_share&#039;
--local tics = sh.GetNameSpace(&#039;queues&#039;)
local tics = {}
local t = {}
local count = 0
local tf = 200
local ticker = &quot;SiU0&quot;
local function new_tic(p, dt)
    if not t.O then
        t.O = p
        t.H = p
        t.L = p
        t.C = p
        t.dt = dt
        count = 1
        return
    end
    if p &gt; t.H then t.H = p end
    if p &lt; t.L then t.L = p end
    t.C = p
    count = count + 1
    if count == tf then
        message(&quot;bar time &quot;..os.date(&quot;%H:%M:%S&quot;,os.time(t.dt))..
            &quot;\nO= &quot;..t.O..
            &quot;\nH= &quot;..t.H..
            &quot;\nL= &quot;..t.L..
            &quot;\nC= &quot;..t.C, 2)
        tics[#tics+1] = t
        --tics.indicator = t
        t.O = nil
    end
end

local exitflag
function main()
    local old_tlr = getNumberOf(&quot;all_trades&quot;) - 500
    while not exitflag do
        local tlr = getNumberOf(&quot;all_trades&quot;)
        if tlr &gt; old_tlr then
            for i=old_tlr, tlr-1 do
                local item = getItem(&quot;all_trades&quot;,i)
                if item and item.sec_code == ticker then
                    new_tic(item.price, item.datetime)
                end
            end
            old_tlr = tlr
        end
        sleep(1)
    end
end
function OnStop()
    exitflag = true
end</code></pre></div>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2020-07-31T20:53:36Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2816#p2816</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Обработка тиков по интервалу количества]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2815#p2815" />
			<content type="html"><![CDATA[<p>kalikazandr, swerg, в любом случае спасибо за активность, постоянно натыкаюсь на ваши ники в разных постах, познавательно)</p>]]></content>
			<author>
				<name><![CDATA[MetalHeart]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3229</uri>
			</author>
			<updated>2020-07-31T18:56:10Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2815#p2815</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Обработка тиков по интервалу количества]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2814#p2814" />
			<content type="html"><![CDATA[<p>Стандартные интервалы меня точно не устраивают. Тики же квик получает, работать с ними позволяет, в данный момент меня рисование на графики как таковое не интересует. Мне нужно взять пусть 200 тиков, это возможно без проблем, насколько я понял, засунуть их в цикл в качестве входных данных, за эти 200 тиков найти макс, мин, открытие-закрытие как на обычной свече. Т.е. это я так понимаю один цикл. И потом это повторять опять же на следующие 200 тиков. Допустим это будет одна функция. А потом результаты этой функции подсунуть следующей функции-индикатору, чтобы получить данные скользящей средней. Опять же, рисовать не обязательно это. Код индикатора доступен, как это делается в общем скрипте с роботом, примеры есть. У меня пока что загвоздка именно в обработке тиков.</p><p>А вот про ограничение &quot;1000 тиков ограничение, если по 200 тиков, то 4 точки будет показывать&quot; вообще ничего не понял, не объясните?</p>]]></content>
			<author>
				<name><![CDATA[MetalHeart]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3229</uri>
			</author>
			<updated>2020-07-31T18:53:06Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2814#p2814</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Обработка тиков по интервалу количества]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2813#p2813" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>С произвольными интервалами даже не знаю как реализовать то, что вы хотите.</p></blockquote></div><p>На тиковом можно, но смысл пропадает, 1000 тиков ограничение, если по 200 тиков, то 4 точки будет показывать</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2020-07-29T07:42:33Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2813#p2813</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Обработка тиков по интервалу количества]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2812#p2812" />
			<content type="html"><![CDATA[<p>В QUIK скрипты индикаторов и &quot;роботов&quot;, так скажем - это полностью непересекающиеся сущности.<br />Функция main() есть только в &quot;роботах&quot;, в индикаторах ее нет.<br />Посмотрите именно написание индикаторов по справке. Там нельзя в произвольный момент времени &quot;брать тики&quot;, там все привязано к моментам получения цены по инструменту (по факту совершения новых сделок на бирже).<br />В этом смысле построить индикатор с произвольным интервалом (вроде это вы хотите) - не совсем понятно как. А может вас стандартные (т.е. имеющиеся в QUIK) интервалы устроят?</p><p>С произвольными интервалами даже не знаю как реализовать то, что вы хотите.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2020-07-29T03:28:45Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2812#p2812</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Обработка тиков по интервалу количества]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2811#p2811" />
			<content type="html"><![CDATA[<p>Здравствуйте! Я новичок, разбираюсь с QLUA.<br />Столкнулся с такой задачей - нужно взять тики по инструменту, отсчитать заданное их количество, назовем его интервалом, (например, 200шт), в этом интервале найти максимум и минимум цены, а также цены первого и последнего тика. И так обновляться в реальном времени. Затем эти данные подставить в индикатор скользящей средней в качестве Open, Close, Low, High.<br />Пока понимаю, что данные можно получить либо через getCandlesByIndex, либо через CreateDataSource, но не понимаю, как их дальше обрабатывать.<br />Буду благодарен за пример скрипта.</p><p>Мой набросок нерабочего варианта(</p><p>function main()<br />x = getNumCandles(&#039;Instrument&#039;)<br />Instr, InstrN, InstrName = getCandlesByIndex(&#039;Instr&#039;, 0, 0, x)<br />for i = 0, InstrN-1, 1 do<br />tick = Instr{i}.close</p><p>--if tick[now-1]&gt;tick[now] then HIGH = tick[now-1] else HIGH = tick[now] end<br />--if tick[now-1]&lt;tick[now] then LOW = tick[now-1] else LOW = tick[now] end</p><p>end<br />--message(&#039;HIGH = &#039;..HIGH..&#039;, LOW = &#039;..LOW)<br />end</p>]]></content>
			<author>
				<name><![CDATA[MetalHeart]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3229</uri>
			</author>
			<updated>2020-07-28T22:32:08Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2811#p2811</id>
		</entry>
</feed>
