<?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=31&amp;type=atom" />
	<updated>2015-07-26T17:23:44Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=31</id>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1515#p1515" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>CyberTrader пишет:</cite><blockquote><p>Зачем теперь дурачком прикидываться?</p></blockquote></div><p>Пусть будет по вашему, я не буду вами прикидываться.</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2015-07-26T17:23:44Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1515#p1515</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1514#p1514" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><div class="codebox"><pre><code>d = 0.00005
print(d) --&gt; 5e-005
d= 0.0005
print(d) --&gt; 0.0005</code></pre></div><p>Поэтому и <strong>только поэтому</strong> нужно строковое представление числа.</p></blockquote></div><p>Это чьи слова, мои или ваши?</p><p>Я же вам выше чёрным по-русски написал:</p><div class="quotebox"><cite>CyberTrader пишет:</cite><blockquote><p><strong>Строковое представление цены нужно для формирования транзакции</strong> при отправке на сервер</p></blockquote></div><p>Зачем теперь дурачком прикидываться?</p>]]></content>
			<author>
				<name><![CDATA[CyberTrader]]></name>
				<uri>https://quik2dde.ru/profile.php?id=248</uri>
			</author>
			<updated>2015-07-26T15:01:27Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1514#p1514</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1513#p1513" />
			<content type="html"><![CDATA[<p>Вы видите, что возвращает функция в качестве результата? Строку или число?<br />Зачем делать, скажем так, &quot;дурацкие&quot; примеры?<br />Я же говорил, не нравится - не пользуйтесь, не умеете применить функцию - спросите, расскажу как, чтобы сообщений с подобными ошибками не возникало.<br />Вам в описании функции sendTransaction ясно дали понять, что цена должна быть в строковом представлении, а не в числовом, а вы лепите туда число.<br />Ну хз, как еще объяснить? Давайте не будем больше об этом беседовать?</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2015-07-26T13:56:18Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1513#p1513</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1512#p1512" />
			<content type="html"><![CDATA[<p>Выше я написал, почему цену переводят в строковое представление: чтобы не получить ошибку:<br /></p><div class="quotebox"><blockquote><p>Сообщение об ошибке: Превышено допустимое число знаков после разделителя дробной части</p></blockquote></div><p>или<br /></p><div class="quotebox"><blockquote><p>Сообщение об ошибке: Число не может содержать знак разделителя дробной части</p></blockquote></div><p>Попробуйте отправить транзакцию: </p><div class="codebox"><pre><code>local transaction = {
    TRANS_ID = &#039;1&#039;,
    ACTION = &quot;NEW_ORDER&quot;,
    ACCOUNT = sAccount,
    CLIENT_CODE = sClientCode,
    CLASSCODE = &#039;QJSIM&#039;,
    SECCODE = &#039;LKOH&#039;,
    OPERATION = &#039;B&#039;,
    TYPE = &quot;L&quot;,
    PRICE = doStep(2450.2, 0.1),
    QUANTITY = &#039;1&#039;
  }</code></pre></div><p>Мало того, что функция doStep формирует неправильную цену, так получите ещё ошибку:</p><div class="quotebox"><blockquote><p>Неправильно указана цена: &quot;2450.100000&quot;<br />Сообщение об ошибке: Превышено допустимое число знаков после разделителя дробной части</p></blockquote></div><p>Видимо, кто-то плохо учил мат.часть <img src="https://quik2dde.ru/img/smilies/lol.png" width="15" height="15" alt="lol" /></p><p>И для общего развития: транзакция с параметром</p><div class="codebox"><pre><code>PRICE = 5e-005</code></pre></div><p> при pricestep&lt;=0.000005 нормально отправляется на сервер. (Другое дело, что цена должна попадать в установленный диапазон.)</p><p>Если параметр задан числом, то функция sendTransaction сама преобразует его в строку с точностью 6 знаков после запятой. Поэтому для бумаг с меньшей точностью цен, чтобы не получить ошибку, необходима принудительная конвертация.</p>]]></content>
			<author>
				<name><![CDATA[CyberTrader]]></name>
				<uri>https://quik2dde.ru/profile.php?id=248</uri>
			</author>
			<updated>2015-07-26T12:12:34Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1512#p1512</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1511#p1511" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>CyberTrader пишет:</cite><blockquote><p>Но строковое представление цены нужно для формирования транзакции при отправке на сервер, а не потому что<br /></p><div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><p>Строковое представление цены нужно для цен, в которых scale &gt; 4.<br /></p><div class="codebox"><pre><code>d = 0.00005
print(d) --&gt; 5e-005</code></pre></div></blockquote></div><p>100% именно из-за этой особенности требуется строковое представление числа</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2015-07-26T11:50:44Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1511#p1511</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1510#p1510" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>CyberTrader пишет:</cite><blockquote><p>К тому же, там округление по математическим правилам, а у вас тупо отбрасывание лишних знаков.</p></blockquote></div><p>Зачем обижаться? Я, иногда, (зачастую) туплю, особенно, когда под шафе.<br />Кому нужны математические правила (и кто знает арифметику за 5 класс), тот ТупО сделал так:<br />return math_floor(val/step + 0.5)*step</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2015-07-26T11:48:46Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1510#p1510</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1509#p1509" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><p>&quot;100&quot; и &quot;100.0&quot; и &quot;100.0000&quot; на сервере биржи будут равны 100</p></blockquote></div><p>Ерунда. Если шаг цены = 0.1, то при &quot;PRICE = &quot;100.0000&quot; вы получите сообщение об ошибке:<br /></p><div class="quotebox"><blockquote><p>Неправильно указана цена: &quot;100.0000&quot;<br />Сообщение об ошибке: Превышено допустимое число знаков после разделителя дробной части</p></blockquote></div><p>Строковое представление цены нужно для формирования транзакции при отправке на сервер, а не потому что<br /></p><div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><p>Строковое представление цены нужно для цен, в которых scale &gt; 4.<br /></p><div class="codebox"><pre><code>d = 0.00005
print(d) --&gt; 5e-005</code></pre></div></blockquote></div><p>Соответственно, при конвертации числа в строку разница в скорости по сравнению с вариантом из [url=https://quik2dde.ru/viewtopic.php?pid=85#p85]поста 2[/url] будет уже не в 14 раз, а ~17% (при оптимизации).<br />К тому же, там округление по математическим правилам, а у вас тупо отбрасывание лишних знаков.<br />Но вы не обижайтесь: я ж справедливую критику даю.</p>]]></content>
			<author>
				<name><![CDATA[CyberTrader]]></name>
				<uri>https://quik2dde.ru/profile.php?id=248</uri>
			</author>
			<updated>2015-07-26T10:42:33Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1509#p1509</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1507#p1507" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>CyberTrader пишет:</cite><blockquote><p>Учитывая, что нужно строковое представление цены с заданной точностью, ваш вариант не годится:<br /></p><div class="codebox"><pre><code>print(doStep(100, 0.1)) --&gt; 100 (должно быть &quot;100.0&quot;)</code></pre></div></blockquote></div><p>А вы попробуйте, а потом пишите.<br />Строковое представление цены нужно для цен, в которых scale &gt; 4.<br />&quot;100&quot; и &quot;100.0&quot; и &quot;100.0000&quot; на сервере биржи будут равны 100<br />Или вы не знали об этом? Плохо, учите мат.часть.<br />Вот вам пример:<br /></p><div class="codebox"><pre><code>d = 0.00005
print(d) --&gt; 5e-005
d= 0.0005
print(d) --&gt; 0.0005</code></pre></div><p>Поэтому и только поэтому нужно строковое представление числа.<br />Если вам не нравится мой способ, да флаг вам в руки - не пользуйтесь.</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2015-07-26T07:49:42Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1507#p1507</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1503#p1503" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><div class="codebox"><pre><code>local math_floor = math.floor
--
local doStep = function (val, step)
    return math_floor(val/step)*step
end</code></pre></div></blockquote></div><p>Учитывая, что нужно строковое представление цены с заданной точностью, ваш вариант не годится:<br /></p><div class="codebox"><pre><code>print(doStep(100, 0.1)) --&gt; 100 (должно быть &quot;100.0&quot;)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[CyberTrader]]></name>
				<uri>https://quik2dde.ru/profile.php?id=248</uri>
			</author>
			<updated>2015-07-26T06:11:55Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1503#p1503</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1390#p1390" />
			<content type="html"><![CDATA[<p>я пол дня потратил на создание этой функции ))</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2015-06-07T11:24:04Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1390#p1390</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1389#p1389" />
			<content type="html"><![CDATA[<p>А, получается вы не от точности цены (скейла) идёте, а от шага цены. Теперь понял. И про дробные значения цены я, конечно, тогда наврал, всё с ними в порядке.<br />Да, тоже вариант, наверное даже более удобный в торговле.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2015-06-06T19:29:05Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1389#p1389</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1388#p1388" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p><strong>kalikazandr</strong>,</p><p>Нужно<br />1) строковое представление цены (именно строковое! хотя, вероятно, надо оторвать за это квиковцам голову)<br />2) ваш вариант не годится для дробных цен (с копейками, долями копеек), он всегда вернёт только целочисленное значение.</p></blockquote></div><p>может я не понял суть вопроса, но мой вариант округляет любую цену до нужного scale, другого я не вижу варианта для торговли.</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2015-06-05T22:26:31Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1388#p1388</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1387#p1387" />
			<content type="html"><![CDATA[<p><strong>kalikazandr</strong>,</p><p>Нужно<br />1) строковое представление цены (именно строковое! хотя, вероятно, надо оторвать за это квиковцам голову)<br />2) ваш вариант не годится для дробных цен (с копейками, долями копеек), он всегда вернёт только целочисленное значение.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2015-06-05T15:06:05Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1387#p1387</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1386#p1386" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>local math_floor = math.floor
--
local doStep = function (val, step)
    return math_floor(val/step)*step
end</code></pre></div><p>как минимум в 14 раз быстрее, чем &quot; return string.format(&quot;%.&quot;..tostring(scale) ..&quot;f&quot;, value) &quot;</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2015-06-05T14:52:44Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1386#p1386</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Формирование цен в примере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=87#p87" />
			<content type="html"><![CDATA[<p><strong>zyanov</strong>,<br />причина исходной вашей проблемки в том, что в примере, на который вы ссылаетесь, робот работает только с одной бумагой, поэтому заведена одна глобальная константа PRICE_SCALE. В ней необходимо указать правильный скейл вашего инструмента. Если вы работаете с разными инструментами одновременно - то необходимо, конечно, передавать скейл как параметр, либо считывать это значение из ТТП.</p><p><strong>mbul</strong>,<br />спасиб за подсказку. Ваш пример действительно мнооого короче моего )<br />Причем он правильно работает и для скейла 0 (не выводит точку), я только для этого выдумал такой большой код, а оказывается, все можно сделать много проще.</p>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>https://quik2dde.ru/profile.php?id=2</uri>
			</author>
			<updated>2013-01-18T16:14:45Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=87#p87</id>
		</entry>
</feed>
