<?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=375&amp;type=atom" />
	<updated>2022-07-16T09:51:11Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=375</id>
		<entry>
			<title type="html"><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3504#p3504" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>iforts пишет:</cite><blockquote><p>Если предыдущий индекс свечи меньше текущего то появилась новая свеча</p></blockquote></div><div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Скажу больше: иногда могут доехать тики в предыдущую свечу, хотя уже новая начала формироваться.</p></blockquote></div><p>У меня, правда, есть смутное воспоминание, что вроде разработчики обещали, что в этом случае для формирующейся свечи заново вызовутся тики, но точно не помню чем закончилось то обсуждение.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-07-16T09:51:11Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3504#p3504</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3503#p3503" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>Увы, но события &quot;закрытие свечи&quot; - не бывает. Никто не знает когда свеча закрылась</code></pre></div><p>На самом деле этот момент легко определить<br />Если предыдущий индекс свечи меньше текущего то появилась новая свеча, для этого достаточно запомнить предыдущий индекс свечи и сравнивать его с текущим</p>]]></content>
			<author>
				<name><![CDATA[iforts]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3251</uri>
			</author>
			<updated>2022-07-16T04:40:32Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3503#p3503</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3502#p3502" />
			<content type="html"><![CDATA[<p>Да, Вы правы! В моменте не увидел применения max/low в своей стратегии... Мне полезней смотреть спред относительно предыдущих значений. Чисто визуальное сравнение.</p>]]></content>
			<author>
				<name><![CDATA[chel74gagar]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3363</uri>
			</author>
			<updated>2022-07-14T10:24:00Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3502#p3502</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3501#p3501" />
			<content type="html"><![CDATA[<p>Никакие sleep не помогут, т.к.<br />- на сколько sleep? всегда найдется ситуация, когда вот так вот просто sleep - не хватит<br />- на sleep всё тупо стоит, новые данные не приходят.</p><p>Не надо пытаться &quot;обмануть&quot; обьективно присутствующий поток данных. Ведь на самом деле в других случаях вы тоже несинхронно получаете данные, из которых вы вычисляете spread, просто там не так это бросается в глаза, потому вы &quot;не замечаете&quot;.</p><p>Далее. Увы, но события &quot;закрытие свечи&quot; - не бывает. Никто не знает когда свеча закрылась. Скажу больше: иногда могут доехать тики в предыдущую свечу, хотя уже новая начала формироваться.<br />И тогда, раз вы пишете:<br /></p><div class="quotebox"><cite>chel74gagar пишет:</cite><blockquote><p>Тут оптимальный вариант max и low считать по закрытию, либо между расчетом spred и max/low</p></blockquote></div><p>то, видимо, вас устраивает, что для формирующейся сейчас свечи значения рассчитываться не будут, а будут только для предыдущих, уже сформированных свеч отображаться.</p><p>Это если в общих словах.<br />Поправить код - это надо думать.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-07-14T10:12:34Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3501#p3501</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3500#p3500" />
			<content type="html"><![CDATA[<p>Исходя из формулы спреда, при корявых данных он будет уходить в -50, поэтому с max особо проблем не возникает... если спред конечно растет! <br />Проще наверное считать max/low по предыдущей свече, ну т.е. не в реальном времени а по закрытию.</p>]]></content>
			<author>
				<name><![CDATA[chel74gagar]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3363</uri>
			</author>
			<updated>2022-07-14T10:01:38Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3500#p3500</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3499#p3499" />
			<content type="html"><![CDATA[<p>Индикатор рассчитывается от +50 до -50, Settings.a ставлю 10 (&quot;max_price = spread + Settings.a&quot; ), т.к. spred считается по двум значениям, которые иногда приходят не одновременно, то получается spred уходит либо в +50 либо в -50, потом возвращается, но из-за Settings.a = 10 max и low получаются не корректны.<br />Например: предыдущий spred был +10, на следующей свече из-за корявых данных происходит скачек в +50 и сразу возврат в например +11, но max остается на показании +11 + Settings.a = 21, а должен быть на +11...<br />Тут оптимальный вариант max и low считать по закрытию, либо между расчетом spred и max/low ставить что-то типа sleep...<br />Помогите с кодом пожалуйста!</p>]]></content>
			<author>
				<name><![CDATA[chel74gagar]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3363</uri>
			</author>
			<updated>2022-07-14T09:44:38Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3499#p3499</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3498#p3498" />
			<content type="html"><![CDATA[<p>Предлагаю не задержку делать<br />Просто добавить условие: если спред &quot;слишком большой&quot; (&quot;подозрительно большой&quot;) - либо не возвращать значение индикатора, т.к. оно &quot;не валидное&quot;, либо возвращать предыдущее значение спреда, либо еще что-то, по ситуации.</p><p>Что такое &quot;слишком большой спред&quot; и чему он равен - вам придется решить.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-07-14T09:01:02Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3498#p3498</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Задержка расчетов индикатора.]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3497#p3497" />
			<content type="html"><![CDATA[<p>Здравствуйте! Помогите пожалуйста вставить в код индикатора задержку между расчетами, или расчет по предыдущей свече.<br />Проблема в том, что spred иногда выносит в макс или в мин (не все данные приходят одновременно) на доли секунды, и max_price и low_price тоже соответственно искажаются, потом spred принимает нормальное значение а max и low - нет...</p><div class="codebox"><pre><code>--- Вычислить спред.
-- @param index номер свечи на графике
-- @return значение спреда или nil, если оно неопределено
local function getSpread(index)
   local timeCode = getTimeCode(T(index))
   local securityPrice = C(index)
   if securityPrice == nil then
       return nil
   end
   -- Получение свечей дополнительных инструментов
   local candle1 = getCandleByTimeCode(Settings.tag1, timeCode)
   local candle2 = getCandleByTimeCode(Settings.tag2, timeCode)
   if candle1 == nil or candle2 == nil then
       return nil
   end
   -- Получение цен дополнительных инструментов
   local price1 = candle1.close
   local price2 = candle2.close
   if price1 == nil or price2 == nil then
       return nil
   end
   -- Вычисление спреда
   local spread = (50 - (100 / (1 + price1 /  price2)))*Settings.k
   
    -- Вычисление максимума минимума среднего для спреда
   if index == 1 then
        max_price = nill
        med_price = nill
        low_price = nill
    elseif T(index).hour &lt; T(index-1).hour then
        max_price = nill
        med_price = nill
        low_price = nill
    end
    if max_price == nill then
        max_price = spread
        
    elseif spread &gt; max_price then
        max_price = spread
        low_price = spread - Settings.a
        med_price =  (max_price+low_price)/2
    end

    if low_price == nill then
        low_price = spread
        
    elseif spread &lt; low_price then
        low_price = spread
        max_price = spread + Settings.a
        med_price =  (max_price+low_price)/2
    end
    if med_price == nill then
        med_price =  (max_price+low_price)/2
    elseif spread &lt; low_price then
        med_price =  (max_price+low_price)/2
    elseif spread &gt; max_price then
        med_price =  (max_price+low_price)/2
    end
   return spread, (max_price+low_price)/2 , max_price, low_price
end

function OnCalculate(index)
   if index &gt; 1 then
       local spread = getSpread(index - 1)
       if spread then
           SetValue(index - 1, 1, spread)
           SetValue(index , 2, med_price)
           SetValue(index , 3, max_price)
           SetValue(index , 4, low_price)
       end
   end
   return getSpread(index), med_price , max_price, low_price
end</code></pre></div><p>Извиняюсь, я не программист, лепил из того что было...</p>]]></content>
			<author>
				<name><![CDATA[chel74gagar]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3363</uri>
			</author>
			<updated>2022-07-14T08:55:05Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3497#p3497</id>
		</entry>
</feed>
