<?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=28&amp;type=atom" />
	<updated>2013-08-01T16:26:56Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=28</id>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=396#p396" />
			<content type="html"><![CDATA[<p>Так вы напишите как вам надо - постараемся помочь. Пока не понятно.</p>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>https://quik2dde.ru/profile.php?id=2</uri>
			</author>
			<updated>2013-08-01T16:26:56Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=396#p396</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=395#p395" />
			<content type="html"><![CDATA[<p>спасибо, так расчитывает High и Low, но только не за период, а с момента запсука скрипта, но все равно спасибо</p>]]></content>
			<author>
				<name><![CDATA[shaly]]></name>
				<uri>https://quik2dde.ru/profile.php?id=144</uri>
			</author>
			<updated>2013-08-01T12:24:41Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=395#p395</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=394#p394" />
			<content type="html"><![CDATA[<p><strong>shaly</strong>, приветствую вас на форуме!</p><p>По вашему вопросу:</p><p>1) Проинициализируйте глодальные переменные в начале скрипта, например так:<br /></p><div class="codebox"><pre><code>High = -1
Low = 10000000</code></pre></div><p>2) В функции math.max и math.min надо передавать несколько аргументов (хотя бы 2), из которых и будет выбираться максимум/минимум. Например, поправить код функции extreme() так:</p><div class="codebox"><pre><code>function extreme()
   trades={}
   dlt = getNumberOf(&quot;all_trades&quot;) - prev_value()
   m = getNumberOf(&quot;all_trades&quot;)
   for i=m-dlt, m-1 do
     trades=getItem(&quot;all_trades&quot;, i)
     price = trades.price
     High = math.max(price, High)
     Low = math.min(price, Low)
   end
   message(&quot; value2=High: &quot; .. tostring(High) .. &quot; Low:&quot; .. tostring(Low), 2)
end</code></pre></div><p>За одно вынес из цикла message, зачем он там, пусть печатает только один раз результат после пробега по очередной порции всех сделок.</p>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>https://quik2dde.ru/profile.php?id=2</uri>
			</author>
			<updated>2013-07-31T18:55:10Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=394#p394</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=393#p393" />
			<content type="html"><![CDATA[<p>Здравствуйте, я по шаблону для расчета среда сделала код для расчета High, Low за короткий промежуток времени, но получить нужные значения так и не получается, выводятся все сделки за интервал времени а выделить из них High, Low не могу<br /></p><div class="codebox"><pre><code>PERIOD = 15  -- период обновления, в секундах

function ReadLogFile()
  nnn = 0
  message(&quot;Readed &quot; .. tostring(nnn) .. &quot; record(s)&quot;)
end

function OnInit(path)
  scriptPath = path
  logFileName = scriptPath .. &quot;.log&quot;
  is_run = true
  message(&quot;Start &quot; .. logFileName)
  ReadLogFile()
end

function OnStop()
  is_run = false
end

function prevAllTrade()
    local _prev=getNumberOf(&quot;all_trades&quot;)
    return function ()
        local ret_value = _prev
        _prev=getNumberOf(&quot;all_trades&quot;)
        return ret_value
    end
end
prev_value=prevAllTrade()

function extreme()
   trades={}
   dlt = getNumberOf(&quot;all_trades&quot;) - prev_value()
   m = getNumberOf(&quot;all_trades&quot;)
   for i=m-dlt, m-1 do
   trades=getItem(&quot;all_trades&quot;, i)
    price = trades.price
        High = math.max(trades.price)
        Low = math.min(trades.price)
    message(&quot; value2=High: &quot; .. tostring(High) .. &quot; Low:&quot; .. tostring(Low), 2)
    end
end

function main()
  while is_run do
    local n = PERIOD
    prevAllTrade()
    extreme()

    while (n &gt; 0) and is_run do
      sleep(1000)
      n = n - 1
   end

  end
end</code></pre></div><p>подскажите в каком направлении искать.</p>]]></content>
			<author>
				<name><![CDATA[shaly]]></name>
				<uri>https://quik2dde.ru/profile.php?id=144</uri>
			</author>
			<updated>2013-07-30T09:40:30Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=393#p393</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=232#p232" />
			<content type="html"><![CDATA[<p>Спасибо, всё работает!</p>]]></content>
			<author>
				<name><![CDATA[Kosmonavt]]></name>
				<uri>https://quik2dde.ru/profile.php?id=79</uri>
			</author>
			<updated>2013-02-19T08:53:12Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=232#p232</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=201#p201" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>admin пишет:</cite><blockquote><p>Т.е. надо изменить формат задания исходного списка на какой-то такой:</p><div class="codebox"><pre><code>SEC = {
{&quot;APTK&quot; = &quot;EQNL&quot;},
{&quot;AVAZP&quot; = &quot;EQNL&quot;}
}</code></pre></div></blockquote></div><p>Да, такой формат как раз позволяет сохранить порядок размещения элементов в таблице (массиве). Только в синтаксисе ошибочка. Надо так:</p><div class="codebox"><pre><code>SEC = {
{[&quot;APTK&quot;] = &quot;EQNL&quot;},
{[&quot;LKOH&quot;] = &quot;EQBR&quot;},
{[&quot;AVAZP&quot;] = &quot;EQNL&quot;}
}</code></pre></div><p>(обратите внимание, внутри после } везде стоят запятые, кроме последней строчки!)</p><p>Цикл поправить так:</p><p>function OutSpreadToLog()<br />&nbsp; local file = io.open(logFileName, &quot;a+t&quot;)</p><p>&nbsp; local i,sec<strong>,n,dat</strong><br />&nbsp; <strong>for n,dat in ipairs(SEC) do <br />&nbsp; &nbsp; sec,class = next(dat)</strong></p><p>&nbsp; &nbsp; local qt = getQuoteLevel2(class, sec)<br />&nbsp; &nbsp; if ((qt.bid_count+0 &gt; 0) and (qt.offer_count+0 &gt; 0)) then<br />.............</p><p>Никакого end добавлять уже не придется, т.к. никакого нового цикла не добавляем, он не нужен.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2013-02-14T08:55:10Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=201#p201</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=200#p200" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>sam пишет:</cite><blockquote><div class="codebox"><pre><code>for i=0,#SEC do
      message(SEC[i],1)
end</code></pre></div><p>у вас не так?</p></blockquote></div><p>в коде автора я менял только строчку финального вывода в файл и у меня бот обращается к ТТП а не к стакану.</p>]]></content>
			<author>
				<name><![CDATA[Kosmonavt]]></name>
				<uri>https://quik2dde.ru/profile.php?id=79</uri>
			</author>
			<updated>2013-02-14T07:14:08Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=200#p200</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=199#p199" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>function AnIndexOf(t,val)
    for k,v in ipairs(t) do 
        if v == val then return k end
    end
end

....

for i=0,#SEC do
      message(SEC[AnIndexOf(SEC,SEC[i])],1)
end</code></pre></div><p>может имелось в виду такое, или я уже спать хочу и думаю не в ту сторону</p>]]></content>
			<author>
				<name><![CDATA[sam]]></name>
				<uri>https://quik2dde.ru/profile.php?id=90</uri>
			</author>
			<updated>2013-02-13T20:31:13Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=199#p199</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=196#p196" />
			<content type="html"><![CDATA[<p>Порядок перебора таблицы видимо зависит от внутреннего формата хранения этой таблицы.<br />Я как-то не знаю как задать строго определенный перебор таблицы в Lua, но ест подозрение, что если в качестве ключа использовать ценые числа - то порядок перебора должен совпадать с ними, правда это потребует небольшой переделки скрипта... мне надо несного времени, чтобы сооразить/поправить.</p><p>О! в тырнетах попалось с ходу [url=http://ilovelua.narod.ru/about_lua.html]следующее[/url]:</p><div class="quotebox"><blockquote><p>Важный момент: пока возможно, Lua внутри себя таблицу хранит как массив, а не как хэш - таблицу. Соответственно доступ к элементам таблицы происходит почти так же быстро, как в массивах Си. Поэтому без особой нужды не стоит превращать массив в хэш. Для того, чтобы не нарушать структуру при добавлении и удалении элементов массива стоит пользоваться&nbsp; библиотекой Lua table.</p></blockquote></div><p>Т.е. надо изменить формат задания исходного списка на какой-то такой:</p><div class="codebox"><pre><code>SEC = {
{&quot;APTK&quot; = &quot;EQNL&quot;},
{&quot;AVAZP&quot; = &quot;EQNL&quot;}
}</code></pre></div><p>т.е. преобразовать в массив таблиц, вероятно он будет перебираться циклом for ... in pairs согласно изнчально заданной последовательности.</p><p>Я вот только не соображу как теперь цикл подправить-то...</p><p>Вот такой вариант, думаю, сработает, но наверняка есть изящнее решение.</p><p>function OutSpreadToLog()<br />&nbsp; local file = io.open(logFileName, &quot;a+t&quot;)</p><p><strong>&nbsp; local i,sec,e1,e2<br />&nbsp; for e1,e2 in pairs(SEC) do <br />&nbsp; for sec,class in pairs(e2) do</strong> </p><p>&nbsp; &nbsp; local qt = getQuoteLevel2(class, sec)<br />&nbsp; &nbsp; if ((qt.bid_count+0 &gt; 0) and (qt.offer_count+0 &gt; 0)) then<br />.............</p><p>(поправленные строчки выделил)<br />Ну и соответственно вставить перед&nbsp; &nbsp;<strong>file:write(&quot;---\n&quot;)</strong>&nbsp; еще один <strong>end</strong>.</p><p>Сразу скажу - не проверял, за работоспособность не ручаюсь.</p>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>https://quik2dde.ru/profile.php?id=2</uri>
			</author>
			<updated>2013-02-13T20:10:22Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=196#p196</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=195#p195" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>for i=0,#SEC do
      message(SEC[i],1)
end</code></pre></div><p>у вас не так?</p>]]></content>
			<author>
				<name><![CDATA[sam]]></name>
				<uri>https://quik2dde.ru/profile.php?id=90</uri>
			</author>
			<updated>2013-02-13T20:05:01Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=195#p195</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=192#p192" />
			<content type="html"><![CDATA[<p>У меня инструменты заданы в таком порядке:</p><p>SEC[&quot;APTK&quot;] = &quot;EQNL&quot;<br />SEC[&quot;AVAZP&quot;] = &quot;EQNL&quot;<br />SEC[&quot;BSPB&quot;] = &quot;EQNL&quot;<br />SEC[&quot;GAZP&quot;] = &quot;EQNE&quot;<br />SEC[&quot;HYDR&quot;] = &quot;EQBR&quot;<br />SEC[&quot;KMAZ&quot;] = &quot;EQBS&quot;<br />SEC[&quot;LKOH&quot;] = &quot;EQBR&quot;<br />SEC[&quot;LSNG&quot;] = &quot;EQNL&quot;<br />SEC[&quot;MAGN&quot;] = &quot;EQNL&quot;<br />SEC[&quot;MRKK&quot;] = &quot;EQNL&quot;<br />SEC[&quot;MSRS&quot;] = &quot;EQBR&quot;<br />SEC[&quot;OGKB&quot;] = &quot;EQBR&quot;<br />SEC[&quot;OPIN&quot;] = &quot;EQNL&quot;<br />SEC[&quot;RASP&quot;] = &quot;EQNL&quot;<br />SEC[&quot;RTKM&quot;] = &quot;EQBR&quot;<br />SEC[&quot;SBER&quot;] = &quot;EQBR&quot;<br />SEC[&quot;SNGS&quot;] = &quot;EQNL&quot;<br />SEC[&quot;SNGSP&quot;] = &quot;EQNL&quot;<br />SEC[&quot;SYNG&quot;] = &quot;EQNL&quot;<br />SEC[&quot;TGKA&quot;] = &quot;EQBR&quot;<br />SEC[&quot;TGKE&quot;] = &quot;EQNL&quot;<br />SEC[&quot;TGKF&quot;] = &quot;EQNL&quot;<br />SEC[&quot;TRMK&quot;] = &quot;EQBR&quot;<br />SEC[&quot;URKA&quot;] = &quot;EQBR&quot;<br />SEC[&quot;VTBR&quot;] = &quot;EQNL&quot;<br />SEC[&quot;VZRZ&quot;] = &quot;EQBS&quot;</p><br /><br /><br /><p>Почему в итоговом файле они идут вразнобой?</p><p>AVR_APTK=0.2068627406292 <br />AVR_OGKB=0.16652977902568 <br />AVR_VZRZ=0.32100360912737 <br />AVR_RASP=0.11919033845793 <br />AVR_URKA=0.058398588662547 <br />AVR_LKOH=0.024594674588463 <br />AVR_AVAZP=0.27888853122047 <br />AVR_SNGSP=0.05923011085541 <br />AVR_LSNG=0.70180301215612 <br />AVR_TGKE=0.53887543384184 <br />AVR_TGKA=0.32988383264019 <br />AVR_TRMK=0.44494026965039 <br />AVR_MSRS=0.86604488170569 <br />AVR_TGKF=0.5589009518343 <br />AVR_OPIN=1.5116186775737 <br />AVR_MAGN=0.068115489441876 <br />AVR_HYDR=0.029428833146793 <br />AVR_VTBR=0.027005381309969 <br />AVR_SYNG=0.8848156772472 <br />AVR_RTKM=0.066976460702493 <br />AVR_SBER=0.013652757755115 <br />AVR_BSPB=0.14493702671554 <br />AVR_SNGS=0.049061792735469 <br />AVR_KMAZ=0.34151044356869 <br />AVR_GAZP=-0.00053292169463214 </p><p>Как сделать так, чтобы они шли в том порядке, который я им задал?</p>]]></content>
			<author>
				<name><![CDATA[Kosmonavt]]></name>
				<uri>https://quik2dde.ru/profile.php?id=79</uri>
			</author>
			<updated>2013-02-13T19:10:57Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=192#p192</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=148#p148" />
			<content type="html"><![CDATA[<p><strong>Kosmonavt</strong>,</p><p>да, именно так. Вы и сами догадались )</p>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>https://quik2dde.ru/profile.php?id=2</uri>
			</author>
			<updated>2013-02-11T17:13:09Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=148#p148</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=146#p146" />
			<content type="html"><![CDATA[<p>тогда по ходу должно быть вот так</p><p>&nbsp; &nbsp;&nbsp; &nbsp;local tablebid = getParamEx(class,&nbsp; sec, &quot;bid&quot;)<br />&nbsp; &nbsp;&nbsp; &nbsp;local bid=tablebid.param_value<br />&nbsp; &nbsp;&nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; local tableoffer = getParamEx(class,&nbsp; sec, &quot;offer&quot;)<br />&nbsp; &nbsp;&nbsp; &nbsp;local offer=tableoffer.param_value</p>]]></content>
			<author>
				<name><![CDATA[Kosmonavt]]></name>
				<uri>https://quik2dde.ru/profile.php?id=79</uri>
			</author>
			<updated>2013-02-11T16:59:42Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=146#p146</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=145#p145" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Kosmonavt пишет:</cite><blockquote><p>появляется ошибка:<br />attempt to perfom arithmetic on local &quot;offer&quot; (a table value)</p><p>как с этим бороться?<br />Добавленные строчки я стянул из документации, там они есть в чистом виде. <br />Почему offer стал табличным значением?</p></blockquote></div><p>у вас offer -&nbsp; это таблица(скорее всего как массив с параметрами qty,price), посмотрите описание функции getParamEx</p>]]></content>
			<author>
				<name><![CDATA[sam]]></name>
				<uri>https://quik2dde.ru/profile.php?id=90</uri>
			</author>
			<updated>2013-02-11T13:17:26Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=145#p145</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подсчёт спреда]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=144#p144" />
			<content type="html"><![CDATA[<p>появляется ошибка:<br />attempt to perfom arithmetic on local &quot;offer&quot; (a table value)</p><p>как с этим бороться?<br />Добавленные строчки я стянул из документации, там они есть в чистом виде. <br />Почему offer стал табличным значением?</p>]]></content>
			<author>
				<name><![CDATA[Kosmonavt]]></name>
				<uri>https://quik2dde.ru/profile.php?id=79</uri>
			</author>
			<updated>2013-02-11T11:10:56Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=144#p144</id>
		</entry>
</feed>
