До сих пор ничего не сделано по автосохранению. Сохранять при выходе конечно здорово, но обычно перезапуск QUIK не требуется, это делается раз в несколько недель.
Добрый день. Можно ли продлить действие логина U0210924 на 12 месяцев и пополнить депозит на клиентский счет: SPBFUT000hx на какую-то очень большую сумму?
Alexey Danin написал: Само использование кириллицы в коде Lua скрипта не должно создавать каких-либо проблем, т.к. это всего лишь ключи полей Lua-таблицы. Можете переключить интерфейс терминала на английский, и тогда в коде Lua скрипта можно будет задавать данные поля транзакции на латинице.
Вы представляете, если это будет open-source библиотека на тысячу русскоязычных пользователей, нужно всем сказать "ребята быстро переключайте терминал на английский язык, или у вас ничего работать не будет" ? Это очень плохое решение.
Alexey Danin написал: Здравствуйте.Существует два формата файлов импорта транзакций: фиксированный и универсальный.В справке QUIK Раздел 6. Совместная работа с другими приложениями/Импорт транзакций/ Фиксированный формат файла импорта транзакций, описан формат и примеры, которые Вы можете использовать при подаче транзакций.Поля, которые не описаны, можно получить в универсальном формате. Например, поместить транзакцию в карман транзакций, сохранить ее в tri файл и полученный результат использовать в своем скрипте.В Вашем случае необходимо использовать универсальный формат, выше Вы привели пример транзакции в таком формате.Если мы поняли Вас не правильно, просьба сообщить.
Спасибо, теперь я понял вас. Мне очень хотелось бы, чтобы для описания данных элементов выставления заявки использовались поля из фиксированного формата импорта транзакций. Либо какие-то существующие поля, либо завести новые поля, дополнительно.
Чтобы эту информацию можно было легко передавать в коде (например .lua скриптов)
В .tri-файл эта транзакция сохраняется таким образом
Код
TRANS_ID=1;CLASSCODE=SPBFUT;ACTION=Ввод заявки;Торговый счет=SPBFUT000kg;К/П=Покупка;Тип=Лимитированная;Класс=SPBFUT;Инструмент=SiU2;Цена=61000;
Количество=1;Условие исполнения=Поставить в очередь;Комментарий=;Переносить заявку=Да;Дата экспирации=20221223;
Нужные написаны кириллицей! То есть в квике на другом языке, эти параметры будут не "Переносить заявку" и "Дата экспирации", а называться как-то по-другому.
Хотелось бы, чтобы можно было задавать их либо через уже имеющиеся поля в универсальном формате файла импорта транзакций, либо для них завели какие-то новые поля в универсальном формате файла импорта транзакций.
Могли бы Вы более подробно описать пожелание, ведь при формировании заявки Вы можете в поле "EXPIRY_DATE" указать вариант "GTC", который будет действовать до отмены.
Касательно латиницы и кириллицы. Также могли бы уточнить, Вам не нравится, что, используя универсальный формат файла импорта транзакций, нужно использовать и кириллицу, и латиницу ?
Добрый день. Я имел ввиду возмость для лимитных заявок на срочном рынке МБ: Я не знаю как называется эта галочка "Переносить заявку" и дата, до которой надо держать заявку активной.
Но в .tri-файле или в описании транзакции я никак не могу это указать!
Юрий Балашов написал: А почему?! Планируется ли введение этой операции в следующих версиях, если нет, то возможно ли это зарегистрировать как пожелание?
Документация p2gate_ru.pdf говорит что для связок move_orders не поддерживается. Видимо биржа пока не подумала поддерживать перевыставление заявок для FUTSPREAD'ов
У одних брокеров в квике фьючерсы называются по буквенным кодам, у других есть месяц.год экспирации. Вариант отображения зависит от сервера брокера, или я могу поменять в настройках квика?
Михаил Е написал: Здравствуйте. Я почему-то не могу перенести квик с одного компьютера на другой копированием папки, при открытии info.exe сразу падает приложение. В версии 8.6 присылал дампы, так и не поправили.
С чистой установки квик работает, я попробовал загрузить настройки из wnd файла но перенеслись далеко не все настройки.
Как можно ещё ПОЛНОСТЬЮ перенести настройки из одного квика в другой?
Добрый день.
Если присылали файлы дампов, то мы должны были сообщить CQ проблемы. Сообщите номер, мы проверим.
CQ02788718
Добрый день. К сожалению, по CQ02788718 разобраться не удалось. Если проблема повторяется, то пришлите архив рабочего места повторно + дмп файл, если он есть.
Вам присылался архив с рабочим местом QUIK. В принципе можете смотреть CQ02803881, там тамп с версии квика 8.8.1.5
Михаил Е написал: Здравствуйте. Я почему-то не могу перенести квик с одного компьютера на другой копированием папки, при открытии info.exe сразу падает приложение. В версии 8.6 присылал дампы, так и не поправили.
С чистой установки квик работает, я попробовал загрузить настройки из wnd файла но перенеслись далеко не все настройки.
Как можно ещё ПОЛНОСТЬЮ перенести настройки из одного квика в другой?
Добрый день.
Если присылали файлы дампов, то мы должны были сообщить CQ проблемы. Сообщите номер, мы проверим.
Михаил Е написал: Здравствуйте. Я почему-то не могу перенести квик с одного компьютера на другой копированием папки, при открытии info.exe сразу падает приложение. В версии 8.6 присылал дампы, так и не поправили.
С чистой установки квик работает, я попробовал загрузить настройки из wnd файла но перенеслись далеко не все настройки.
Как можно ещё ПОЛНОСТЬЮ перенести настройки из одного квика в другой?
Добрый день.
Если присылали файлы дампов, то мы должны были сообщить CQ проблемы. Сообщите номер, мы проверим.
Здравствуйте. Я почему-то не могу перенести квик с одного компьютера на другой копированием папки, при открытии info.exe сразу падает приложение. В версии 8.6 присылал дампы, так и не поправили.
С чистой установки квик работает, я попробовал загрузить настройки из wnd файла но перенеслись далеко не все настройки.
Как можно ещё ПОЛНОСТЬЮ перенести настройки из одного квика в другой?
Кажется, подсчет транзакций можно сделать следующим образом - запоминаем транзакцию когда её отправляем - когда получили ответ от сервера, начинаем считать 1 секунду - можно поставить лимит времени, когда мы сами забудем транзакцию например, если соединение разорвалось и сервер не ответил
Код
--
-- Подсчёт количества событий, произошедших за последние несколько секунд.
-- При регистрации очередного события в массив событий добавляется новый элемент с указанием текущего момента времени.
-- При подсчёте числа событий учитываются только те события, которые произошли не более чем указанное количество
-- секунд назад, а остальные события удаляются из массива.
--
local EventsCounter = {}
local function systime()
local d = os.sysdate()
local mcs = d.mcs or 0
d.ms = nil
d.mcs = nil
return os.time(d) + mcs * 0.000001
end
--- Конструктор.
-- @param self объект
-- @param interval количество секунд, на протяжении которых отслеживаются события
-- @param bump максимальное количество секунд, на протяжении которого событие занимает очередь без регистрации
local function new(self, interval, bump)
local object = {
interval = interval,
bump = bump,
events = {},
}
setmetatable(object, self)
self.__index = self
return object
end
EventsCounter.new = new
--- Зарегистрировать событие.
-- @param self объект
local function registerEvent(self, trans_id)
self.events[trans_id] = systime()
end
EventsCounter.registerEvent = registerEvent
--- Запомнить событие до его регистрации
-- @param self объект
local function preRegisterEvent(self, trans_id)
self.events[trans_id] = systime() + self.bump
end
EventsCounter.preRegisterEvent = preRegisterEvent
--- Узнать, сколько событий произошло за последние несколько секунд.
-- @param self объект
-- @return количество событий, произошедших за последние несколько секунд
local function getCount(self)
local now = systime()
local count = 0
local remove = {}
for id, time in pairs(self.events) do
if now - time <= self.interval then
count = count + 1
else
remove[id] = true
end
end
for id, _ in pairs(remove) do
self.events[id] = nil
end
return count
end
EventsCounter.getCount = getCount
return EventsCounter
Отправка транзакции
Код
local EventsCounter = require("EventsCounter")
local eventsCounter = EventsCounter:new(1.0, 30.0)
function myTransactionSend(transaction)
-- Перед отправкой транзакции проверяем количество событий и притормаживаем, если надо
while eventsCounter:getCount() >= 50 do
sleep(10)
end
-- Ваш код, который отсылает заявку
sendTransaction()
eventsCounter:preRegisterEvent(tonumber(transaction.TRANS_ID))
end
Получение ответа на транзакцию:
Код
-- ответ на отправку транзакции
function OnTransReply(trans_reply)
eventsCounter:registerEvent(transReply.trans_id)
end
Возможность использовать транзакции вида MOVE_ORDERS действительно была временно отключена по техническим причинам.
К сожалению, на момент Вашего обращения не можем сообщить когда именно доступ к данным транзакциям будет восстановлен. Как только это произойдет - Ваш брокер будет соответствующим образом извещён, и, вероятно, своевременно сообщит об этом Вам при соответствующем запросе с Вашей стороны.
Спустя несколько месяцев, что-нибудь прояснилось? Будет ли доступна транзакция MOVE_ORDERS хотя бы в новом 8м квике?
swerg написал: Вполне может еще сетевой буфер влиять: несколько транзакций по факту накапливаются на вашей стороне в один сетевой пакет, после чего весь макет одновременно уезжает серверу, где они все сразу обрабатывает Это можно объяснить как меньшее кол-во заявок в секунду по вашим замерам, так и одновременность их обработки.
Попробуйте связаться с брокером и уточнить у него по чем для вас встанет для вас увеличение допустимого количества транзакций в секунду. Вдруг это будет обозримая цифра. Ну либо придётся менять алгоритм, избавляюсь от простой идеи одновременного снятия буквально всех заявок. Наверняка ведь вашу торговую идею можно реализовать иначе, красивее и без внезапного снятия буквально всех выставленных заявок.
:) Сначала там вообще была оплата за каждую транзакцию выше 20 в секунду, я подумал это какая-то дыра, даже если снимать все заявки в квике, когда заявок несколько десятков. Я предложил брокеру например платить фикс сумму в месяц, на что они просто сделали до 50 транзакций в секунду, дальше будет ошибка.
Дыра - в смысле практически неконтролируемо получаю доп комиссию от брокера, и я не понимал как уследить, где было больше 20 тр. в секунду...
swerg написал: Вполне может еще сетевой буфер влиять: несколько транзакций по факту накапливаются на вашей стороне в один сетевой пакет, после чего весь макет одновременно уезжает серверу, где они все сразу обрабатывает Это можно объяснить как меньшее кол-во заявок в секунду по вашим замерам, так и одновременность их обработки.
Попробуйте связаться с брокером и уточнить у него по чем для вас встанет для вас увеличение допустимого количества транзакций в секунду. Вдруг это будет обозримая цифра. Ну либо придётся менять алгоритм, избавляюсь от простой идеи одновременного снятия буквально всех заявок. Наверняка ведь вашу торговую идею можно реализовать иначе, красивее и без внезапного снятия буквально всех выставленных заявок.
:) Сначала там вообще была оплата за каждую транзакцию выше 20 в секунду, я подумал это какая-то дыра, даже если снимать все заявки в квике, когда заявок несколько десятков. Я предложил брокеру например платить фикс сумму в месяц, на что они просто сделали до 50 транзакций в секунду, дальше будет ошибка.
_sk_, код в целом работает, но иногда сбоит. Причем если смотреть по таблице транзакций (время и микросекунды), то иногда не вижу чтобы в 1 секунду были ровно 50 транзакций (бывало 23), а ошибка есть. Или что странно там по 5-10 транзакций пишутся с одинаковой секундой и микросекундой (1/1000000), но это вообще не реально выглядит, по логам скрипта время различается, хотя бы на несколько миллисекунд.
Возможно Sergey Gorokhov - сможете объяснить как хотят транзакции между квиком и сервером и как замеряется этот интервал - 50 транзакций в секунду?
_sk_ написал: Заведите себе объект, который вычисляет количество отправленных заявок в последнюю секунду (реализация через очередь). Если количество заявок больше, скажем, 45, не отправляйте новые. Понятно, что ограничение неприятное и неудобное, но спамить сервер тоже не правильно.
Извините, можете привести пример, как написать это эффективно?
Например достался код коннектора у которого, повезло, всего одна точка sendTransaction:
Код
-- отправка траназакции квику
function router:processTransaction(transaction, tJson)
trace("info", "NEW TRANSACTION: " .. tJson)
local ok = sendTransaction(transaction)
if ok ~= "" then
-- код, чтобы обработать ошибку
end
end
Как сделать, чтобы проходило не более 50ти в секунду, но при этом не тупо делать sleep(1000 / 50) ?
Здравствуйте. Подниму эту проблему. Вообще сам по себе 7й квик работает нормально, на Windows 10 с разрешением экрана 1920x1080 и масштабированием в 150%. Но если подключить чужую библиотеку StockSharp.Quik.lua, то окно терминала сразу сворачивается а элементы сильно мельчают в размерах. Почему такое может быть из-за Lua скрипта, в нём особо ничего нет, он фактически обращается к dll'ке
Да, чтобы работали колбэки, совсем не обязательно определять эти функции в lua-скрипте. И даже использовать Trans2Quik. Функции колбэков можно регистрировать в глобальном окружении (_G) луа-машины из C-кода своей подключенной через 'require ...' DLL, тогда Quik обнаружит их и сможет вызывать.
Спасибо. Правда этот код изобилует макросами, я так понимаю структуры там после обработки макросов преобразуются в функции-callback'и
Михаил Е написал: Здравствуйте. На сколько я знаю, общая схема работы lua "коннекторов" к квиву, что они переопределяют почти все функции обратного вызова (callback'и onXXX) по их действию собирают данные в объекты-таблицы и отправляют их своей программе (через разные библиотеки например socket core.dll)
Да, для транзакций у них внутри наверняка работает Trans2Quik. Но как же они могут получать рыночные данные и данные "стаканов" без какого-либо кода в lua скрипте ? Другими словами, какие функции нужно определить в DLL, написанной на C# или C++, чтобы получать данные из квика?
Добрый день. При помощи Trans2Quik можете подписать на состояние заявок и сделок в QUIK. Функции описаны в руководстве пользователя QUIK: Раздел 6. Совместная работа с другими приложениями/Раздел 6. Совместная работа с другими приложениями/Функции для работы с транзакциями через API
Транзакции это не главное. Мне не понятно, каким образом можно сделать dll библиотеку на C# или C++, чтобы она принимала к себе вызовы функций OnXXX из вашего Quik Lua. При этом не прописывая этот код в .lua файле.
Здравствуйте. На сколько я знаю, общая схема работы lua "коннекторов" к квиву, что они переопределяют почти все функции обратного вызова (callback'и onXXX) по их действию собирают данные в объекты-таблицы и отправляют их своей программе (через разные библиотеки например socket core.dll)
Да, для транзакций у них внутри наверняка работает Trans2Quik. Но как же они могут получать рыночные данные и данные "стаканов" без какого-либо кода в lua скрипте? Другими словами, какие функции нужно определить в DLL, написанной на C# или C++, чтобы получать данные из квика?
Andrey Bezrukov написал: Иными словами, Вы бы хотели, чтобы выбор инструментов для таблицы "Обезличенные сделки" был реализован аналогично тому, как этот функционал выполнен для таблицы текущих торгов, правильно?
Да, чтобы в фильтре инструментов была такая же иерархия как в таблице текущих торгов. Например для опционов это разбиение по фьючерсному контракту, потом разбиение по датам экспирации и наконец сами инструменты. Можно выбрать что-нибудь в этой иерархии и сразу добавить все инструменты, которые к "этому узлу" относятся.
Михаил Е написал: В день экспирации он ещё торгуется, на срочном рынке МБ до 18:45 этого дня,
Можно делать склейку в следующий день. Т.е. 20 был экспир, мы от склейки отказались. А 21, в ручном режиме делаем замену и склейку. Тогда получается так как вы хотите, если я правильно понимаю вопрос.
Проблема в основном в том, что в один день заканчиваются сотни контрактов (опционов и фьючерсов), там неудобно в этом списке искать что тебе нужно оставить, а что можно заменить.
Что вы имеете ввиду под включенной склейкой? Она позволит смотреть график и торговать текущим контрактом, пока он не закончился?
Михаил Е написал: Здравствуйте. Было бы удобно, если в настройках программы, замены инструментов можно было указать не замену инструментов за 0 дней до погашения (т.е. сегодня или вчера, позавчера...в прошлом), а попросить заменять только истекшие контракты.
То есть например 21 сентября он бы проверял на замену инструменты с исполнением (или погашением) 20 сентября, 19 сентября или ещё раньше. А 20 сентября - предлагал бы заменить инструменты с погашением не позднее 19 сентября.
Добрый день. Можно просто соглашаться на замену инструмента в день экспирации.
В день экспирации он ещё торгуется, на срочном рынке МБ до 18:45 этого дня, не удобно заменять инструмент если он ещё нужен или по нему есть позиции.
Здравствуйте. Было бы удобно, если в настройках программы, замены инструментов можно было указать не замену инструментов за 0 дней до погашения (т.е. сегодня или вчера, позавчера...в прошлом), а попросить заменять только истекшие контракты.
То есть например 21 сентября он бы проверял на замену инструменты с исполнением (или погашением) 20 сентября, 19 сентября или ещё раньше. А 20 сентября - предлагал бы заменить инструменты с погашением не позднее 19 сентября.
Sergey Gorokhov написал: нужен конкретный пример транзакции (дата, время, класс, инструмент), ваш UID, и кто Ваш брокер. Далее запросим логи у брокера и по логам разберемся.
это типичная транзакция которых по инструменту были десятки если не сотни за день. По синтаксису она корректна. На сервер брокера она выставилась, проблема что в Lua её оповещение не прошло... Луа так понимаю локальный язык, с брокером никак не связан.
Цитата
Sergey Gorokhov написал: Сообщите дату этих транзакций и хотя-бы примерное время, Ваш UID и кто брокер. Пока этого будет достаточно.
Sergey Gorokhov написал: Пока же просто проверьте актуальные ли у Вас версии (терминал QUIK 7.19 и qlua.dll версии 2.7.0.3)
Да, версии совпадают
Цитата
Sergey Gorokhov написал: Если есть проблема с Lua мы готовы разбираться, но нам нужен конкретный пример.
схематически я описал что произошло, а по поводу примера я не представляю данные какой подробности тут нужны. Проблема была на версии то ли 7.16 то ли 7.18 в квике, про новую версию не знаю, пока ещё не видел.
Sergey Gorokhov написал: ЦитатаМихаил Ершов написал: Сталкиваюсь с проблемой иногда что в Lua не приходят транзакции с номером заявки, Если есть проблема следует разобраться с причиной проблемы, а потом уже делать выводы. Приведите пример такой такой транзакции (скриншот или лог), сообщите Ваш UID и кто брокер.
Это редкая ситуация, происходит раз другой среди тысяч ордеров. Последний раз было как-то так, что отсылаются две транзакции на лимитные ордера по двум разным инструментам. По первому инструменту получили нормальный отклик (transaction reply) с номером заявки, сохранили номер у себя и всё хорошо. По второму инструменту отклик на транзакцию не пришел!
Цитата
Sergey Gorokhov написал: Зачем? Всё что есть в trans2quik уже есть в Lua
Есть, но если Lua это не очень надежный инструмент, разработчик говорит навертели много защиты от его ошибок и все равно такие косяки. Я думаю вещи на C++ будут работать четко, не как на интерпретируемых скриптах.
Здравствуйте, вижу что очень популярно использовать Lua скрипт в квике для экспорта данных в свои приложения, написанные на некотором языке - C++, C#, Python ... Такой вопрос, можно ли технически в паре с Lua скриптом использовать trans2quik для заявок из программы, а Lua - для поступления торговых данных?
Сталкиваюсь с проблемой иногда что в Lua не приходят транзакции с номером заявки, хотя они выставляются, они теряются из виду у робота и т.д. Посоветовали trans2quik как "прямой API" к квику, типа такой проблемы не будет, поэтому думаю попробовать его если это нормальная и не устаревшая технология?
Sergei Kunitckii написал: Михаил, по поводу "другого "тикера"" просьба дать пояснения. Сейчас берется базовый актив для расчета, Вы хотите, чтобы можо было указать совсем другой инструмент, произвольный?
Это был бы самый универсальный и самый лучший вариант. Я привел пример, например если не доверяем фьючерсу SBRF-3.18, то можно брать цену с акции "Сбербанк ао" с фондового рынка, или например вместо MGNT-3.18 брать цену акций "Магнит". Например для нефти...даже какую-то индикативную котировку вместо фьючерса, скажем если брокер транслирует Brent Oil Index, либо RTSI (индикативный индекс РТС). В более простом варианте можно сделать только возможно выбирать среди доступных фьючерсов у актива (например для опционов по доллар-рублю можно выбирать между Si-3.18, Si-6.18, Si-9.18, ... как источником цены БА. С поправкой своими коэффициентами)
Sergei Kunitckii написал: Уже сейчас есть возможность заменять заявку и это происходит через снятие заявки, это особенность реализации.
Сергей, возможно это особенность брокерской сборки! Я вижу что "Изменить алго-заявку Ctrl+A" не доступно, активен только вариант "Снять алго-заявку Ctrl+D"
Sergei Kunitckii написал: 2. Про замену не совсем понятно ,что Вы хотите. Уже сейчас есть возможность заменять заявку и это происходит через снятие заявки, это особенность реализации.
Это небольшое удобство, сейчас сначала нужно щёлкнуть Ctrl+D или пункт меню отменить заявку, потом нужно ещё раз щёлкнуть по отменённой заявке в таблице алго-заявок, чтобы она открылась с теми же параметрами, их можно было поменять и выставить заново.
Почему бы не сделать активной замену заявки, чтобы и заявку снимало, и сразу же открывало окно с её параметрами (можно выставить заново, можно нажать отмену и не выставлять).
Цитата
Sergei Kunitckii написал: 3. Мы зарегистрировали пожелание по поводу применения коэффициентов к цене базового актива при расчете цены алгозаявки.
Да, именно что получать цену с другого "тикера", символа как базового актива. И поправку коэффициентами. Если это сложно реализовать, тогда ладно...
Есть пожелания по улучшению работы с алгоритмической заявкой "Волатильность" для опционов 1) Очень неудобно что все выставленные заявки пропадают после 23:59 на следующий торговый день. Хотя в принципе они могут быть актуальны для меня. Можно ли сделать - либо, чтобы данные заявки переносились на следующий день, соответственно например на FORTS они снимают связанные ордера перед закрытием в 23:50 и продолжают работать в следующий торговый день с 10:00 плюс несколько секунд. Собственно как-то так работает заявка со сроком действия (GTD) - либо сделать возможность сохранять такие заявки в карман транзакций и потом доставать их в следующий день. Соответственно в кармане транзакций желательна возможность редактировать все её параметры. При доставании одной или нескольких таких заявок, наверно, стоит показывать подтверждающие диалоги на каждую (то же самое, когда создаешь заявку и видишь "Вы действительно хотите выполнить транзакцию "Ввод алго-заявки", и т.д.") 2) Хотелось бы, чтобы алго-заявку волатильность можно было заменять. То есть в таблице алго-заявок выбираешь Изменить алго заявку (Ctrl+A), тогда текущая заявка и ордера - отменяется, всплывает окно с параметрами только что снятой алго-заявки. Их можно поменять и поставить новую заявку. 3) Последний пункт чисто пожелание, в алгоритме который переводит волатильность в цену ордера есть параметр S – текущая цена базового актива (для опционов FORTS используется параметр «Расчетная цена»);
Неплохо, если можно будет гибко задавать S как a*S'+b, где a, b - коэффициенты; S' - текущая цена другого инструмента. Например, если мы рассматриваем опцион по фьючерсу сбербанка (SBRF-3.18), и хотим использовать котировку "Сбербанк ао" с фондового рынка как более точную и динамично меняющуюся, то есть S = 100,5000 * Котировка (МБ ФР:Сбербанк ао) + 0,0000. (100,50 потому что цена фьючерса равна цене 100 акций и фьючерс несколько дороже из-за безрисковой ставки)
Добрый день, пытаюсь с помощью данных таблиц отслеживать бид/аск, например строю таблицу по изменению "Лучшей цены спроса" на 20-30 неликвидных инструментах, потом строю ещё одно таблицу по изменению "Лучшей цены предложения" на этих же инструментах. Записей там не много, думаю за сессию 1-2-3 тысячи строк выходит, но где-то через полчаса работы терминал зависает, только его разворачиваешь - он что-то грузит, отвисает и сразу же снова что-то грузит, отвисает и так зацикливается. Кнопка крестика из-за этого не работает. Windows предлагает только убивать зависшее приложение. А при повторном открытии эти два окна уже пропадают...