<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[QUIK -> DDE &mdash; Задержка расчетов индикатора.]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=375</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=375&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Задержка расчетов индикатора.».]]></description>
		<lastBuildDate>Sat, 16 Jul 2022 09:51:11 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3504#p3504</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Sat, 16 Jul 2022 09:51:11 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3504#p3504</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3503#p3503</link>
			<description><![CDATA[<div class="codebox"><pre><code>Увы, но события &quot;закрытие свечи&quot; - не бывает. Никто не знает когда свеча закрылась</code></pre></div><p>На самом деле этот момент легко определить<br />Если предыдущий индекс свечи меньше текущего то появилась новая свеча, для этого достаточно запомнить предыдущий индекс свечи и сравнивать его с текущим</p>]]></description>
			<author><![CDATA[null@example.com (iforts)]]></author>
			<pubDate>Sat, 16 Jul 2022 04:40:32 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3503#p3503</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3502#p3502</link>
			<description><![CDATA[<p>Да, Вы правы! В моменте не увидел применения max/low в своей стратегии... Мне полезней смотреть спред относительно предыдущих значений. Чисто визуальное сравнение.</p>]]></description>
			<author><![CDATA[null@example.com (chel74gagar)]]></author>
			<pubDate>Thu, 14 Jul 2022 10:24:00 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3502#p3502</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3501#p3501</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 14 Jul 2022 10:12:34 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3501#p3501</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3500#p3500</link>
			<description><![CDATA[<p>Исходя из формулы спреда, при корявых данных он будет уходить в -50, поэтому с max особо проблем не возникает... если спред конечно растет! <br />Проще наверное считать max/low по предыдущей свече, ну т.е. не в реальном времени а по закрытию.</p>]]></description>
			<author><![CDATA[null@example.com (chel74gagar)]]></author>
			<pubDate>Thu, 14 Jul 2022 10:01:38 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3500#p3500</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3499#p3499</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (chel74gagar)]]></author>
			<pubDate>Thu, 14 Jul 2022 09:44:38 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3499#p3499</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задержка расчетов индикатора.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3498#p3498</link>
			<description><![CDATA[<p>Предлагаю не задержку делать<br />Просто добавить условие: если спред &quot;слишком большой&quot; (&quot;подозрительно большой&quot;) - либо не возвращать значение индикатора, т.к. оно &quot;не валидное&quot;, либо возвращать предыдущее значение спреда, либо еще что-то, по ситуации.</p><p>Что такое &quot;слишком большой спред&quot; и чему он равен - вам придется решить.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 14 Jul 2022 09:01:02 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3498#p3498</guid>
		</item>
		<item>
			<title><![CDATA[Задержка расчетов индикатора.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3497#p3497</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (chel74gagar)]]></author>
			<pubDate>Thu, 14 Jul 2022 08:55:05 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3497#p3497</guid>
		</item>
	</channel>
</rss>
