Imersio Arrigo пишет: Слышу звон, но не знаю... ага. Почитайте про систему виртуальной памяти чтоли, и как работает файл подкачки. И сами осознайте какую связь это имеет с "файлами данных самого терминала".
Я не собираюсь изучать все детали функционирования виртуальной памяти Windows. Для этого есть другие специалисты, которым за это платят. К тому же ни Вы ни я не можем знать деталей функционирования самого терминала Quik, поэтому нельзя исключать, что в самом терминале предусмотрена загрузка информации в оперативную память из файлов данных терминала по мере необходимости, а также освобождение памяти от не нужной в данный момент информации.
Цитата
Imersio Arrigo пишет: Если только своп будет в пару терабайт... )))
Если бы я не наблюдал такую картину на своем терминале много раз, то не писал бы об этом. Это не мои домыслы или предположения, а многократно подтвержденный факт.
Цитата
Imersio Arrigo пишет: Тогда при таком требовании, Вы должны отдавать себе отчет в том, что когда программа выжрет всю оперативку (а при наличии на машине ее меньше 4Г это случится очень быстро) вся система просто встанет колом.
Программа пока что не отжирала у меня больше полутора гигов оперативки. Обычно даже меньше, притом что открыто в ней очень много всего... И если важна стабильная работа, то вполне можно пожертвовать 1 или даже полутора гигами ОЗУ, в ущерб остальным приложениям (которые можно вообще не запускать на машине с терминалом).
Gridmer пишет: При сворачивании любой программы винда ее скидывает из памяти в файл подкачки. При разворачивании начинает оттуда подгружать обратно.
Все несколько сложней. При разворачивании квика совсем не обязательно начнется подгрузка данных из файла подкачки в память. Зато такая подгрузка может начаться и при свернутом окне терминала, если ему в процессе работы вдруг понадобятся какие-то данные, которые были ранее удалены из памяти и, возможно, сброшены в файл подкачки (я не уверен, что они подгружаются из файла подкачки, а не из файлов данных самого терминала). И процесс такой подгрузки данных с диска в память может оказаться настолько длительным, что в итоге связь с сервером разорвется по тайм-ауту.
Поэтому было бы здорово, если бы разработчики добавили настройку в терминал, которая позволяла бы запретить удаление данных из памяти с последующей из загрузкой с диска при необходимости, а заставляла бы вместо этого постоянно держать все данные терминала в оперативной памяти. Прошу зарегистрировать такое пожелание на доработку.
Вообще-то прописывать в скрипте коды всех клавиш нет необходимости, это нужно только для управляющих клавиш. Для всех остальных (алфавитно-цифровых) можно использовать простое преобразование кода клавиши в символ, например, так:
Зацикливать внутри коллбэка ничего не нужно. Каждое новое нажатие клавиши приводит у новому вызову коллбэка, внутри которого это нажатие обрабатывается. Просто после начала редактирования текста в ячейке нужно установить значение какой-то переменной-флага в true, тогда при очередном вызове коллбэка он будет знать, что сейчас работает режим ввода текста и нужно добавить новый символ к строке и т.п. После нажатия Enter флаг ставите = false.
Николай Камынин пишет: Если нельзя, но очень хочется то можно попробовать указать EXECUTION_CONDITION -Условие исполнения заявки, необязательный параметр. Со значением «FILL_OR_KILL» – немедленно или отклонить,
Вряд ли это поможет исполнить заявку по цене, худшей, чем есть сейчас в стакане.
Спрэд в стакане и цены совершённых сделок (Таблица всех сделок), Проблема понимания изменения спрэда в стакане и цены совершённых сделок в Таблице всех сделок
А разве может быть такое, чтобы объем на графике не соответствовал данным из ТВС (ну если не считать каких-то сбоев в работе сервера QUIK)? Ведь графики строятся на сервере по тем же данным, которые мы видим в ТВС. Или я ошибаюсь?
Will Will пишет: Оформляйте заявку хочу чтоб в луа была возможность работать с данными ТИП не открывая ее, как с ТВС. Собственно о чем я и писал ранее.
Если для CreateDataSource задать колбек то таблицу не надо открывать
Для программиста-пользователя вашего терминала разница будет в том, что если ему нужно проанализировать историю изменений двух и более параметров в совокупности, то при использовании CreateDataSource ему нужно будет самостоятельно собирать внутри скрипта аналог ТИП с использованием значения count (при условии, что вы реализуете исправления в алгоритме формирования этого значения). Если же вы предоставите механизм непосредственного обращения к строкам ТИП из скрипта (аналогично работе с ТВС), то подобная задача сильно упростится. Поэтому подобное пожелание, на мой взгляд, заслуживает отдельной регистрации. А уж сможете ли вы его реализовать, и если сможете, то когда - это другой вопрос.
тем не менее картинку вставить можно в текст и отобразится она в виде массы букв, но если потом это сообщение вставить в цитату, то увидишь картинку во время редактирования своего сообщения. Так что потенциально возможность размещать картинки есть, но что-то не доделано здесь.
Ну не то чтобы обманул... Просто не понял, что именно хотел Viktor MMM Конечно, совершенно самостоятельный скрипт, содержащий функцию main(), так не получится запустить. Но насчет того, что dofile просто вставляет в текущий скрипт текст из указанного файла, можно поспорить. Согласно официальной документации функция dofile открывает указанный файл и выполняет его содержимое (хотя конечный итог получается практически такой же, как при вставке текста):
Цитата
dofile ([filename]) Opens the named file and executes its contents as a Lua chunk. When called without arguments, dofile executes the contents of the standard input (stdin). Returns all values returned by the chunk. In case of errors, dofile propagates the error to its caller (that is, dofile does not run in protected mode).
Скорей всего, у Сбера просто заблокирована возможность пинговать их сервер. Если телнет устанавливает соединение на нужный порт, то со связью все ок. А ругань в вашем первом сообщении скорей всего была как-то связана с региональными языковыми настройками.
При желании можно также с помощью тех же самых средств QLua создать поля для ввода и редактирования строк (даже с мигающим внутри такого поля "курсором"). Но вообще средства для создания интерфейсов программ в QLua довольно примитивные, требуют немало времени и усилий от программиста, поэтому тут уже неоднократно звучали просьбы клиентов к разработчикам Quik о развитии этих средств.
Viktor MMM пишет: Дмитрий, это Вы про нарисовать таблицу с ячейками да нет, потом отследить движения мыши и обработку? Или есть другой способ? Мне этот вариант показался не то чтобы немыслимым, хоть и реальным, но пока что не могу его принять, по религиозным соображениям) Но конечно, что выяснится, что со сторонними функциями будут глюки, придется идти другим путем.
Да, именно про таблицу с ячейками и отслеживание мыши. Если поковыряться, то можно даже красиво сделать. И не только кнопки Да/Нет, но и всякие чекбоксы и т.п. Если видели интерфейс Far, то он ведь фактически так же выглядит - все кнопки и т.п. из обычных текстовых символов. Зато не надо думать о побочных эффектах использования сторонних библиотек.
Вообще-то создать окно с надписью и кнопками Да Нет и обрабатывать его результаты можно и стандартными средствами QLua (работа с экранными таблицами). Придется написать побольше кода, будет выглядеть не так красиво, но зато не нужно подключать никакие внешние библиотеки.
Фьючерсы и опционы, возможно, выбираются потому, что терминал всегда получает по ним данные, даже если никаких таблиц по ним не открыто. Как объясняли разработчики, такова реализация работы терминала, вот ссылка на эту тему: http://forum-archive.quik.ru/forum/quik/123962/
Признаюсь, я особо не вникал в функционал Вашей библиотеки, но сама возможность вызывать выполнение функций Lua в терминале посредством HTTP-запросов наводит на мысль, что использование такой библиотеки может быть сопряжено с большим риском (несанкционированное вмешательство в работу терминала посторонних лиц через Интернет с целью получения данных или совершения операций по счету). Наличие открытого кода помогло бы уменьшить подобные опасения.
Sergey Gorokhov пишет: направление сделки определяется по направлению первой заявки. Если первая заявка была на покупку значит сделка будет на покупку и на оборот
А Вы уверены, что не ошиблись? В документации по Квик написано, что тип сделки в ТВС (купля или продажа) определяется направленностью заявки, инициирующей заключение сделки:
Цитата
«Купля» - заключена сделка путем выставления заявки на покупку против находящейся в торговой системе котировки на продажу, «Продажа» - заключена сделка по заявке на продажу
То есть, согласно вашей документации направление сделки определяется направлением второй заявки.
Цитата
Sergey Gorokhov пишет: Но следует уточнить что тут играет значение о каком именно рынке мы говорим.
Разницы между фондовым и срочным рынками Московской биржи в данном случае быть не должно - это уже обсуждалось ранее на старом форуме (причем Вы сами давали тогда в конечном итоге правильный ответ, с учетом которого в дальнейшем была исправлена ваша документация): http://forum-archive.quik.ru/forum/quik/118273/118273/
Василий пишет: Покопал на тему внесистемных сделок, судя по всему тут имеет место быть биржевая адресная сделка, которая и не попадает в таблицу.
Интересно, а на объеме, отображаемом на графике, такая сделка тоже не отразится? Или на значениях параметров ТТП типа "Количество во всех сделках" и "Оборот в деньгах"?
Вопрос еще в том, работает ли эта вещь с любыми классами инструментов (в том числе теми, которые обычно торгуются на бирже) или же такая "кухня" возможна лишь по специально созданным для этого классам инструментов. Во втором случае клиент должен явно указать согласие на обработку своих заявок внутри "кухни" путем выбора специального класса инструментов, не существующего на бирже (типа TQBR_KITCHEN вместо TQBR).
Присоединяюсь к вопросу Старателя к разработчикам по поводу возможности перехвата и исполнения брокером обычных заявок клиентов без вывода их на биржу.
Поясню свой вопрос. Сейчас еще раз провел несложный эксперимент - пометил галочками все классы в меню "Связь/Заказ всех сделок", после чего установил связь с сервером. При этом ни одного тикового графика и ТВС открыто не было. Через час отключился от сервера и открыл ТВС - ни одной сделки за это время не поступило. Но если бы я при установленном соединении с сервером открыл ТВС хотя бы по одному единственному инструменту, то в итоге терминал получил бы сделки по всем инструментам из тех классов, которые были отмечены в меню "Связь/Заказ всех сделок".
А почему информация по всем сделкам для классов, выбранных в меню "Связь/Заказ всех сделок", не будет поступать в терминал, если в нем не открыто ни одного тикового графика или ТВС хотя бы по одному инструменту? Получается, что с одной стороны, настройки в меню "Связь/Заказ всех сделок" имеют решающее значение при определении списка классов/инструментов, по которым будут приходить сделки (так как сделки будут приходить по всем выбранным там классам и/или инструментам, даже если по ним не открыты тиковые графики или ТВС), но с другой стороны если в терминале вообще не будет открыто ни одного тикового графика или ТВС, то сделки вообще не будут поступать в терминал. То есть, случайно закрыв единственный тиковый график или ТВС по одному инструменту, можно прервать получение данных по целому списку других инструментов или классов. Можно исправить такое поведение терминала? То есть сделать так, чтобы обезличенные сделки поступали в терминал с учетом настроек в меню "Связь/Заказ всех сделок" независимо от наличия или отсутствия в терминале тиковых графиков и ТВС?
Здравствуйте! Правильно ли я понимаю, что для того чтобы в терминал (в ТВС) поступали все обезличенные сделки по нескольким классам достаточно отметить их галочками в меню "Связь / Заказ всех сделок", но при этом нет необходимости открывать тиковые графики или ТВС по всем этим классам, а достаточно иметь открытую ТВС хотя бы даже по одному какому-нибудь инструменту из любого другого класса?
Старатель пишет: Причём, если график не открыт в терминале, то значения "старых" свечей мы получаем только в колбеке (не зависимо, сохранён кэш графиков или нет). Если график открыт, то "старые" свечи возвращаются в CreateDataSource.
То есть если график не открыт, то CreateDataSource вообще не выдаст нам свечи, сохраненные в кэше?
Некто пишет: Для графика Сбера периодов 1 и 2 мин они равны. Для Si getNumCandles() в 21:30 возвращает бОльшее число. Возможно, это связано с тем, что на FORTS после 19:00 начинается новая сессия?
Николай Камынин пишет: Полагаю, что речь идет о реальном времени. Т е рассмотрим реальную торговлю, а иначе нет смысла вообще в этой дискуссии.
Цитата
Николай Камынин пишет: Запрашивать сервер о количестве свечей не имеет смысла,
По-моему, Вы не вникли в смысл темы, которая обсуждалась выше. Речь идет о получении истории свечей при первоначальном вызове CreateDataSource (которая обычно достигает 3000 свечей за прошлые дни, плюс сегодняшние свечи). Этот процесс занимает неопределенное время (особенно при одновременном открытии источников данных по нескольким инструментам), а скрипт должен ждать окончания загрузки данных. Прежде всего нам нужно знать, есть ли вообще такая история на сервере. Если на момент вызова CreateDataSource на сервере нет ни одной свечи, то мы можем ждать бесконечно долго пока функция Size() вернет значение, большее 0, или придет коллбэк. Смысл запрашивать количество свечей на сервере есть, и он состоит в том, чтобы избежать подобных ситуаций.
Sergey Gorokhov пишет: Дело в том, что нет такого критерия который позволил бы отличить ситуацию "продолжения ожидания" от "отсутствия данных", а значит и решить эту проблему нельзя.
А почему бы не сделать дополнительную функцию, при вызове которой будет возвращаться количество свечей, которое было на сервере по заданному инструменту на момент вызова этой функции? Она отрабатывала бы намного быстрей, чем CreateDataSource, т.к. не требовалось бы передавать весь массив свечей на терминал. Вызвав ее, мы смогли бы узнать, какое минимальное количество свечей должна вернуть нам CreateDataSource. И, самое главное, эта функция всегда возвращала бы нам какое-то определенное значение, даже если свечей по данному инструменту на сервере нет. Если при вызове этой новой функции мы получим 0, то будем знать, что нет смысла ждать поступления каких-либо данных. Таким образом, проблема бесконечного ожидания была бы устранена на 100%. По-моему, нет ничего невозможного в реализации такой функции. Прошу зарегистрировать соответствующее пожелание на доработку.