<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=312&amp;type=atom" />
	<updated>2020-03-06T11:11:36Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=312</id>
		<entry>
			<title type="html"><![CDATA[Re: почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2620#p2620" />
			<content type="html"><![CDATA[<p>Ух спасибо, это еще проще! Без всяких доп функций </p><br /><div class="quotebox"><cite>toxa пишет:</cite><blockquote><div class="quotebox"><cite>dkostiunin пишет:</cite><blockquote><p>Спасибо за инфу, честно говоря, для меня сложно понять, мозгов не хватает таблицы в других таблицах с кучей условий.</p></blockquote></div><p>тогда так: <br /></p><div class="codebox"><pre><code>name_instr = getParamEx(&#039;TQBR&#039;, &#039;VTBR&#039;, &#039;SHORTNAME&#039;).param_image</code></pre></div></blockquote></div>]]></content>
			<author>
				<name><![CDATA[dkostiunin]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3119</uri>
			</author>
			<updated>2020-03-06T11:11:36Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2620#p2620</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2619#p2619" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>dkostiunin пишет:</cite><blockquote><p>Спасибо за инфу, честно говоря, для меня сложно понять, мозгов не хватает таблицы в других таблицах с кучей условий.</p></blockquote></div><p>тогда так: <br /></p><div class="codebox"><pre><code>name_instr = getParamEx(&#039;TQBR&#039;, &#039;VTBR&#039;, &#039;SHORTNAME&#039;).param_image</code></pre></div>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-06T07:48:09Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2619#p2619</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2618#p2618" />
			<content type="html"><![CDATA[<p>Здравствуйте<br />Спасибо за инфу, честно говоря, для меня сложно понять, мозгов не хватает таблицы в других таблицах с кучей условий.</p><p>Я воспользовался советом выше, и использовал функцию SearchItems <br />все взял из документации</p><p>function fn(par1 )<br />&nbsp; &nbsp; if par1 == instr then&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; return true&nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; else <br />&nbsp; &nbsp; &nbsp; &nbsp; return false&nbsp; &nbsp;<br />&nbsp; &nbsp; end<br />end</p><p>function OnTrade (trade_data)</p><p>&nbsp; &nbsp; instr=trade_data.sec_code<br />&nbsp; &nbsp; numm=getNumberOf(&quot;securities&quot;)<br />&nbsp; &nbsp; t1 = SearchItems(&quot;securities&quot;, 0, numm-1, fn, &quot;code &quot;) <br />&nbsp; &nbsp; t2=getItem (&quot;securities&quot;, t1[1])<br />&nbsp; &nbsp; name_instr=t2.name</p><br /><br /><div class="quotebox"><cite>toxa пишет:</cite><blockquote></blockquote></div>]]></content>
			<author>
				<name><![CDATA[dkostiunin]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3119</uri>
			</author>
			<updated>2020-03-05T20:48:57Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2618#p2618</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2614#p2614" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>dkostiunin пишет:</cite><blockquote><p>Попытался вникнуть , что это вообще такое, дается тяжко<br />эту строку толком не понял</p></blockquote></div><p>википедия [url]https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F#%D0%9F%D0%BE%D0%B1%D0%B8%D1%82%D0%BE%D0%B2%D0%BE%D0%B5_%D0%98[/url] и калькулятор windows вам в помощь.</p>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-04T05:41:38Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2614#p2614</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2613#p2613" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>dkostiunin пишет:</cite><blockquote><p>Здравствуйте<br />Вы меня озадачили с этими битами.</p></blockquote></div><p>Здравствуйте, это не я вас озадачил, это арка придумала, шлет таблицу с заявкой, где ооочень много полей просто никак и никем не используются, зато есть флаги битовые, что бы вам и остальным высушить мозг и потратить ваше драгоценное время, на изучение темы, которая вам, я уверен, никогда не пригодится.<br />Как работают их функции побитового сравнения мне не известно, в доке нет их описания, зато есть описание битовых масок, по которым можно понять что это за заявка/сделка/направление и проч.<br />Не забивайте себе голову этой чепухой, сосредоточиться нужно на поиске и реализации Грааля, остальное все блажь.<br />Нашли что искали, воткнули в код, работает и отлично. А как оно там работает, разберетесь в свободное время, попивая пивко на пляже (хотя вряд ли вы даже вспомните про биты, какие то маски, маски у хоккеистов).</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2020-03-03T22:19:17Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2613#p2613</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2612#p2612" />
			<content type="html"><![CDATA[<p>Здравствуйте<br />Вы меня озадачили с этими битами.<br />Попытался вникнуть , что это вообще такое, дается тяжко<br />эту строку толком не понял,</p><p>if bit.band(flags, 0x1) ~= 0</p><p>здесь сравнивается два бита, из теории (если я правильно понял), если оба бита равны 1, то условие выполняется.</p><p>flags&nbsp; - это то число, которое я пытался использовать,&nbsp; оно , как я уже выяснил, бывает и 25 и 26 и 28 и 29 и 30.<br />Как это число может быть равно нулю или единице ?</p><p>0х1 - это , флаг, берется из&nbsp; описания битов флагов, но как это здесь используется, не пойму(ведь это в контексте каждой таблицы означает что то свое), по идее оно либо true&nbsp; либо false<br /> почему сравнивается тип - число, и тип boolean ?</p><p>написал вот так</p><p>flag=trade_data.flags</p><p>flag1=bit.test(flag, 2)</p><p>if flag1==true then<br />&nbsp; &nbsp;flag1 = &#039;продажа&#039;<br />&nbsp; &nbsp; else flag1 = &#039;покупка&#039;<br />end</p><p>вроде работает</p><br /><br /><div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><p>Так нельзя, это битовые флаги и могут иметь отличные от увиденных вами чисел, пользуйтесь функцией Operation_TLR(flags), если вас смущают возвращаемые цифры -1/1, замените их на &quot;продажа&quot;/&quot;покупка&quot;.</p><br /><p>По коду инструмента вы найдете всю инфо в таблице <strong>securities</strong>, скорее всего подойдет параметр <strong>short_name</strong>. Но не берусь утверждать, т.к. с облигациями дел не имел.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[dkostiunin]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3119</uri>
			</author>
			<updated>2020-03-03T15:46:29Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2612#p2612</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2604#p2604" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>dkostiunin пишет:</cite><blockquote><p>Можно выгрузить в файл названия вместе с кодами, и потом забирать при запуске скрипта в таблицу, и оттуда уже присваивать, но все таки может какой то вариант получения из таблиц квика напрямую?</p></blockquote></div><p>вот, можете воспользоваться моей вынималкой параметров инструментов:<br /></p><div class="codebox"><pre><code>sec_params_fetcher = {}
setmetatable(sec_params_fetcher, {
    __call = function(__call_self, ...)
        local tbl = {}
        if select(&#039;#&#039;, ...) == 0 then 
            setmetatable(tbl, {
                __index = function(self, class_code)
                    local sec_codes = {}
                    setmetatable(sec_codes, {
                        __index  = function(self, sec_code)
                            local sec_params = __call_self(class_code, sec_code)
                            rawset(self, sec_code, sec_params)
                            return sec_params
                        end
                    })
                    rawset(self, class_code, sec_codes)
                    return sec_codes
                end
            })
        else
            local class_code, sec_code, is_cached = ...
            setmetatable(tbl, {
                __index = function(self, key)
                    local res = rawget(getmetatable(self) or {}, key)
                    if res == nil then 
                        local paramtable = getParamEx(class_code, sec_code, key)
                        if paramtable ~= nil and paramtable.result == &#039;1&#039; then 
                            if paramtable.param_type == &#039;1&#039; or paramtable.param_type == &#039;2&#039; or paramtable.param_type == &#039;4&#039; then
                                res = tonumber(paramtable.param_value)
                            elseif paramtable.param_type == &#039;3&#039; then
                                res = paramtable.param_image
                            elseif paramtable.param_type == &#039;5&#039; then
                                local t = {year = 1970, month = 1, day = 1}
                                t.hour,t.min,t.sec = string.match(paramtable.param_image, &quot;(%d%d)%p(%d%d)%p(%d%d)&quot;) 
                                res = os.time(t)
                            elseif paramtable.param_type == &#039;6&#039; then
                                local d = {hour = 0, min = 0, sec = 0}
                                d.day,d.month,d.year = string.match(paramtable.param_image, &quot;(%d*)\.(%d*)\.(%d*)&quot;)
                                res = os.time(d)
                            else
                                res = paramtable.param_image
                            end
                        end
                        if res ~= nil and self.__cached then rawset(self, key, res) end
                    end
                    return res
                end,
                SetCached = function(self, is_cached)
                    if (is_cached ~= true) then
                        for i, v in pairs(self) do rawset(self, i, nil) end
                    end
                    rawset(getmetatable(self) or {}, &#039;__cached&#039;, (is_cached == true))
                end
            })
            tbl:SetCached(is_cached)
        end
        return tbl
    end
})

-- securities parameters list (QUIK 8.1):
--
-- LONGNAME, SHORTNAME, CODE, ISINCODE, REGNUMBER, CFI_CODE, CLASSNAME, CLASS_CODE, TRADE_DATE_CODE, SEC_FACE_VALUE, SEC_FACE_UNIT, SEC_SCALE, LCURRENTPRICE,
-- SEC_PRICE_STEP, DISCOUNT1, DISCOUNT2, DISCOUNT3, SEC_COMMENT, LOTSIZE, SECTYPE, CURRENCYID, LISTLEVEL, PRIMARYDIST, QUALIFIED, ASSURED, ANONTRADE, STATUS, 
-- BID, BIDDEPTH, BIDDEPTHT, NUMBIDS, OFFER, OFFERDEPTH, OFFERDEPTHT, NUMOFFERS, OPEN, HIGH, LOW, LAST, CHANGE, QTY, TIME, VOLTODAY, VALTODAY, TRADINGSTATUS, 
-- VALUE, WAPRICE, HIGHBID, LOWOFFER, NUMTRADES, PREVPRICE, PREVWAPRICE, CLOSEPRICE, LASTCHANGE, MARKETPRICE, PRICEMAX, PRICEMIN, SELLDEPO, BUYDEPO, STEPPRICET, 
-- STEPPRICE, CLPRICE, STARTTIME, ENDTIME, MAT_DATE, DAYS_TO_MAT_DATE, OPTIONBASECLASS, R_SETTLEPRICE, OPENPCTCHANGE, STEP_IN_CURRENCY, PRICEMINUSPREVWA,  
-- SETTLEDATE, SETTLECODE, SETTLEDATE1, TRADINGPHASE, FIRST_CUR, SECOND_CUR, DPVALINDICATORBU, DPVALINDICATORSE, MARKETPRICETODAY, ISSUESIZE, PREVDATE, BASEPRICE, 
-- LCLOSEPRICE, QUOTEBASIS, ADMITTEDQUOTE, PREVADMITTEDQUOT, LASTBID, LASTOFFER, MARKETPRICE2, PREVLEGALCLOSEPR, OPENPERIODPRICE, MIN_CURR_LAST, MIN_CURR_LAST_TI, 
-- ISSUESIZEPLACED, COUNTERPRICE, PREVLOTSIZE, LOTSIZECHANGEDAT, PLANNEDTIME, AUCTPRICE, AUCTVALUE, AUCTVOLUME, AUCTNUMTRADES, IMBALANCE, MARKETVOLB, MARKETVOLS

function main()
    local sec = sec_params_fetcher()
    -- example 1:
    message(&#039;TQBR@SBER.LAST == &#039; .. tostring(sec.TQBR.SBER.LAST))
    message(&#039;TQBR@VTBR.LAST == &#039; .. tostring(sec.TQBR.VTBR.LAST))
    message(&#039;TQBR@SBER.TRADINGSTATUS == &#039; .. tostring(sec.TQBR.SBER.TRADINGSTATUS))
    -- example 2:
    local tqbr_sber = sec.TQBR.SBER
    message(&#039;TQBR@SBER.SHORTNAME == &#039; .. tostring(tqbr_sber.SHORTNAME))
    -- example 3:
    local tqbr = sec.TQBR
    message(&#039;TQBR@VTBR.STARTTIME == &#039; .. tostring(tqbr.VTBR.STARTTIME))
    tqbr.SBER:SetCached(true) -- enable parameter caching for SBER
    message(&#039;TQBR@SBER.SETTLEDATE == &#039; .. tostring(tqbr.SBER.SETTLEDATE))
    -- example 4:
    local tqbr_rosn_cached = sec_params_fetcher(&#039;TQBR&#039;, &#039;ROSN&#039;, true) -- enable parameter caching, getParamEx() is called only once per parameter
    message(&#039;TQBR@ROSN.SHORTNAME == &#039; .. tostring(tqbr_rosn_cached.SHORTNAME))
end</code></pre></div>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-03T10:30:18Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2604#p2604</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2587#p2587" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>dkostiunin пишет:</cite><blockquote><p>&nbsp; &nbsp; &nbsp; &nbsp; if (flag==29) then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flag = &#039;продажа&#039;<br />&nbsp; &nbsp; &nbsp; &nbsp; else flag = &#039;покупка&#039;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end</p></blockquote></div><p>Так нельзя, это битовые флаги и могут иметь отличные от увиденных вами чисел, пользуйтесь функцией Operation_TLR(flags), если вас смущают возвращаемые цифры -1/1, замените их на &quot;продажа&quot;/&quot;покупка&quot;.<br /></p><div class="quotebox"><cite>dkostiunin пишет:</cite><blockquote><p>если можно, еще хотел спросить, в описании параметров таблицы сделки есть sec_code<br />но чего нибудь связанного с названием инструмента (ни краткого ни полного) не вижу.</p></blockquote></div><p>По коду инструмента вы найдете всю инфо в таблице <strong>securities</strong>, скорее всего подойдет параметр <strong>short_name</strong>. Но не берусь утверждать, т.к. с облигациями дел не имел.</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2020-03-02T20:55:39Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2587#p2587</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2584#p2584" />
			<content type="html"><![CDATA[<p>Спасибо за наводку.<br />Поэкспериментировал<br />вот так</p><p>function OnTrade (trade_data)<br />&nbsp; &nbsp; flag=trade_data.flags</p><p>выяснил, что при покупке flag=25 а при продаже 29</p><p>написал вот так</p><p>&nbsp; &nbsp; &nbsp; &nbsp; if (flag==29) then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flag = &#039;продажа&#039;<br />&nbsp; &nbsp; &nbsp; &nbsp; else flag = &#039;покупка&#039;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end</p><p>если можно, еще хотел спросить, в описании параметров таблицы сделки есть sec_code<br />но чего нибудь связанного с названием инструмента (ни краткого ни полного) не вижу.<br />Мне это надо, чтобы получать в телеграм оповещения о произошедших сделках - а у меня облигации<br />у которых код инструмента это RUXXXXXXX</p><p>Можно выгрузить в файл названия вместе с кодами, и потом забирать при запуске скрипта в таблицу, и оттуда уже присваивать, но все таки может какой то вариант получения из таблиц квика напрямую?</p>]]></content>
			<author>
				<name><![CDATA[dkostiunin]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3119</uri>
			</author>
			<updated>2020-03-02T19:44:28Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2584#p2584</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2580#p2580" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>dkostiunin пишет:</cite><blockquote><p>Как можно еще узнать, какая была сделка, продажа или купля?</p></blockquote></div><p>Вам нужно поле flags, которое содержит битовый флаг направления сделки.<br /></p><div class="codebox"><pre><code>local function Operation_TLR(flags)
    if bit.band(flags, 0x1) ~= 0 then
        return -1 --продажа
    end
    return 1 --покупка
end
function OnTrade(item)
   local direction = Operation_TLR(item.flags)
end
--из таблиц тоже пойдет
local item = getItem(&quot;AllTrades&quot;, i) --i = № строки в таблице
local item = getItem(&quot;Trades&quot;, i) 
local direction = Operation_TLR(item.flags)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2020-03-02T16:08:34Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2580#p2580</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[почему параметр side_qualifier таблицы Сделки всегда выдает ноль?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2579#p2579" />
			<content type="html"><![CDATA[<p>с помощью OnTrade пытаюсь получить инфу, какая была сделка</p><p>function OnTrade (trade_data) </p><p>operat=trade_data.side_qualifier</p><p>у меня операт всегда равно 0.<br />Что значит из документации&nbsp; - не определено, почему так???</p><p>Как можно еще узнать, какая была сделка, продажа или купля?</p>]]></content>
			<author>
				<name><![CDATA[dkostiunin]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3119</uri>
			</author>
			<updated>2020-03-02T15:50:35Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2579#p2579</id>
		</entry>
</feed>
