<?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=361&amp;type=atom" />
	<updated>2022-02-08T10:03:11Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=361</id>
		<entry>
			<title type="html"><![CDATA[Re: Подписаться на стакан при активном ордере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3432#p3432" />
			<content type="html"><![CDATA[<p>Я просто чтобы запустить и проверить логику. Так-то я json перегоняю и в сокет пишу.</p>]]></content>
			<author>
				<name><![CDATA[unregistered]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3330</uri>
			</author>
			<updated>2022-02-08T10:03:11Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3432#p3432</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подписаться на стакан при активном ордере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3429#p3429" />
			<content type="html"><![CDATA[<p>квик не захлебывается сообщениями message(&quot;Received &quot; .. class_code .. &quot;.&quot; .. sec_code)? или по инструменту 1 сделка в пол часа?</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2022-02-07T21:23:56Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3429#p3429</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подписаться на стакан при активном ордере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3428#p3428" />
			<content type="html"><![CDATA[<p>Получился вот такой скрипт. Я отказался от отписки при снятии ордера и просто сделал таймаут. Это имеет смысл, так как заявку я буду перемещать и реагировать как-то по особому на снятие ордера мне не надо. Ну а после того, как весь объём будет набран, подписка тихо отомрёт за ненадобностью.</p><p>Я понимаю, почему Вы меня отговариваете - задача очень напоминает сеточник, но это не он. Я просто хочу входить по лучшей цене в позицию и стакан нужен, чтобы я мог отработать назад, так как по таблице текущих торгов я будут видеть свою цену. Иногда стукнуться в противоположную сторону спреда меня устраивает, конкурировать с HFT я не собираюсь на Квике.</p><div class="codebox"><pre><code>function OnInit(script)
    isRun = true
    state = {}
end

function OnOrder(order)

    if not IsSubscribed_Level_II_Quotes(order[&quot;class_code&quot;], order[&quot;sec_code&quot;]) then
        message(&quot;Subscribing to &quot; .. order[&quot;class_code&quot;] .. &quot;.&quot; .. order[&quot;sec_code&quot;])
        Subscribe_Level_II_Quotes(order[&quot;class_code&quot;], order[&quot;sec_code&quot;])
    end

    state[order[&quot;class_code&quot;] .. &quot;.&quot; .. order[&quot;sec_code&quot;]] = os.time()
end

function OnQuote(class_code, sec_code)
    if state[class_code .. &quot;.&quot; .. sec_code] ~= nil then
        if state[class_code .. &quot;.&quot; .. sec_code] + 60 &lt; os.time() then
            unsubscribe(class_code, sec_code)
        else
            message(&quot;Received &quot; .. class_code .. &quot;.&quot; .. sec_code)
        end
    end
end

function unsubscribe(class_code, sec_code)

    if IsSubscribed_Level_II_Quotes(class_code, sec_code) then
        message(&quot;Unsubscribing to &quot; .. class_code .. &quot;.&quot; .. sec_code)
        Unsubscribe_Level_II_Quotes(class, ticker)
    end

    state[class_code .. &quot;.&quot; .. sec_code] = nil
end

function main()
    while isRun do

        sleep(10)
    end
end</code></pre></div><p>Большое Вам спасибо за код.</p>]]></content>
			<author>
				<name><![CDATA[unregistered]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3330</uri>
			</author>
			<updated>2022-02-07T20:07:11Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3428#p3428</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подписаться на стакан при активном ордере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3403#p3403" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>unregistered пишет:</cite><blockquote><p> да и не нужны все стаканы по умолчанию.</p></blockquote></div><p>не знаю на счет импортированных заявок, OnTransreply можно заменить на OnOrder с проверкой &quot;новой&quot; заявки.<br />Суть не в этом. Вы планируете руками торговать 500+ инструментов единовременно?<br />Если нет, то просто заказываете стакан.<br />Как по мне - то, что вы хотите увидеть в стакане - вы не увидите, скорее всего, никогда!<br />Просто забудьте саму идею -&nbsp; история стакана и квик - не совместимые понятия.<br />з.ы.<br />при выставлении новой заявки всегда приходит 2 события OnOrder.<br />достаточно понимать, что заявки с таким номером не существует, значит номер нужно добавить в соответствующую таблицу и первое событие OnOrder - не обрабатывать - никак.<br />з.ы2.<br />полуавтоматическая торговля, с использованием внешних источников сигналов, приведет вас к потере депо, безоговорочно.</p>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2021-12-28T19:46:56Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3403#p3403</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подписаться на стакан при активном ордере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3402#p3402" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Надо будет докручивать логику, чтобы отписка была только после исполнения / снятия второй заявки.</p></blockquote></div><p>Да, точно, сразу не сообразил. А её можно вообще докрутить?<br />OnTransReply не подойдёт, так как по документации не вызывается для импортированных заявок. <br />OnOrder вызывается несколько раз для одной заявки при её создании, поэтому просто завести таблицу и считать там число срабатываний не получится.</p><p>Можно, конечно, подписаться на 10 минут с момента последнего срабатывания onOrder(), внося инструменты в таблицу и проверяя в main(), правда это только для ликвидных инструментов. Ну или самостоятельно снимать ордер чаще чем раз в 10 минут.</p><p>В программе экспорта стаканов по ODBC указано ограничение не больше 10 стаканов, подозреваю что в Квике тоже будет такое же ограничение, поэтому совсем долго держать ненужную подписку я бы не стал.</p><div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Если вы планируете постоянно заявку &quot;перемещать&quot; в стакане - то не совсем понятно зачем подписываться / отписываться.</p></blockquote></div><p>В примере выше так будет происходить, если я правильно понял код. </p><p>Т.е.<br />1. подписались<br />2. решили передвинуться<br />3. заявка снята -&gt; отписались<br />4. заявка поставлена -&gt; подписались</p><div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Наверняка же после исполнения заявки вы будете выставлять новую, другого направления.</p></blockquote></div><p>Не всегда, иногда надо просто купить или продать по лучшей цене, нежели кидать в мидпрайс <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /><br />Я бы подписался вообще на все стаканы всех инструментов, но в Квике нет такой возможности (и, подозреваю, его производительности не хватит) да и не нужны все стаканы по умолчанию.</p>]]></content>
			<author>
				<name><![CDATA[unregistered]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3330</uri>
			</author>
			<updated>2021-12-28T12:20:36Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3402#p3402</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подписаться на стакан при активном ордере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3400#p3400" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>unregistered пишет:</cite><blockquote><p>Правда я не понял, почему будут проблемы при 2 заявках по одному инструменту.</p></blockquote></div><p>Надо будет докручивать логику, чтобы отписка была только после исполнения / снятия второй заявки.</p><p>Если вы планируете постоянно заявку &quot;перемещать&quot; в стакане - то не совсем понятно зачем подписываться / отписываться.<br />Наверняка же после исполнения заявки вы будете выставлять новую, другого направления.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2021-12-28T12:03:36Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3400#p3400</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подписаться на стакан при активном ордере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3399#p3399" />
			<content type="html"><![CDATA[<p>Спасибо!<br />Правда я не понял, почему будут проблемы при 2 заявках по одному инструменту.</p><p>Не уверен нужно ли делать задержку при отписывании. Вообще, я хочу котировать по лучшей цене, т.е. обнаружив что мою заявку перебили или наоборот, позади есть свободное место, я ордер планирую переставить, получится что я отпишусь-подпишусь. Вопрос насколько это будет критично.</p>]]></content>
			<author>
				<name><![CDATA[unregistered]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3330</uri>
			</author>
			<updated>2021-12-28T11:32:00Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3399#p3399</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Подписаться на стакан при активном ордере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3398#p3398" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>unregistered пишет:</cite><blockquote><p>Добрый вечер,</p></blockquote></div><p>Привет! А если заявки 2 по одному инструменту? тогда беда <img src="https://quik2dde.ru/img/smilies/wink.png" width="15" height="15" alt="wink" /><br /></p><div class="codebox"><pre><code>local exitflag
function main()
    while not exitflag do
        --some code
        sleep(1)
    end
end
function OnTransReply(t)
    if not IsSubscribed_Level_II_Quotes(t.class_code, t.sec_code) then
        Subscribe_Level_II_Quotes(t.class_code, t.sec_code)
        message(&quot;OnTransReply\n Subscribe ql2: &quot;..t.class_code..&quot; &quot;..t.sec_code, 2)
    end
end
function OnOrder(t)
    if bit.band(t.flags, 0x1) == 0 then
        Unsubscribe_Level_II_Quotes(t.class_code, t.sec_code)
        message(&quot;OnOrder\n Unsubscribe ql2: &quot;..t.class_code..&quot; &quot;..t.sec_code, 2)
    end
end
function OnStop()
    exitflag = true
end</code></pre></div>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2021-12-28T01:23:58Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3398#p3398</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Подписаться на стакан при активном ордере]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3397#p3397" />
			<content type="html"><![CDATA[<p>Добрый вечер,<br />нет ли у кого-нибудь готового скрипта, реализуюшего такую логику</p><p>1) если есть активный ордер, то подписываемся на получение стакана котировок<br />2) если активного ордера нет, скажем, секунд 10 - то отписываемся, чтобы не грузить Квик. Таймаут нужен для операции типа MOVE_ORDER - когда ордер снят, а новый ещё не пришёл, чтобы не было сайд эффекта. </p><p>Я хочу настроить запись стакана куда-нибудь, а уровень lua примерно &quot;могу копипастить примеры&quot;. С записью я примеры нашёл, а вот с такой логикой нет.</p><p>Спасибо</p>]]></content>
			<author>
				<name><![CDATA[unregistered]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3330</uri>
			</author>
			<updated>2021-12-27T21:22:27Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3397#p3397</id>
		</entry>
</feed>
